Видеоуроки, интерактивный редактор и сохранение прогресса — бесплатно, сразу после входа.
ВойтиСоздать аккаунт — бесплатноЗакончили урок?
Войдите, чтобы отмечать прогресс
Эта сигнатура встречается в TypeScript едва ли не чаще всех остальных. Разберём по частям:
T это тип объекта, выводится из obj.K extends keyof T это ключ, причём только один из ключей T. Для user это "name" | "age".T[K] это тип поля по этому ключу.При вызове prop(user, "age") TypeScript выводит K не как string, а как литерал "age". Ограничение extends keyof T просит литеральный тип, и компилятор его сохраняет. Дальше T["age"] раскрывается в number.
Можно написать key: keyof T без отдельного K:
Компилироваться будет, но результат станет объединением типов всех полей. Связь с конкретным ключом теряется, потому что keyof T это все ключи сразу. Отдельный параметр K запоминает, какой именно ключ передали.