Ключ и тип поля
keyof T превращает объектный тип в объединение его ключей:
Онлайн-редактор кода, разбор решения и отметки о прогрессе доступны после входа.
ВойтиСоздать аккаунт — бесплатноkeyof T превращает объектный тип в объединение его ключей:
type User = { name: string; age: number };
type UserKey = keyof User; // "name" | "age"А запись T[K] достаёт тип поля по ключу: User["age"] это number.
В задании функция читает поле объекта по имени:
Здесь сразу несколько ошибок. Внутри функции obj[key] не компилируется: по произвольной строке читать из T нельзя. Результат unknown, и его не присвоить ни в number, ни в string. А вызов с несуществующим ключом "email" проходит молча, и директива @ts-expect-error остаётся без своей ошибки.
Корень в том, что key объявлен как любая строка и никак не связан с объектом. Нужен второй параметр типа, который будет знать, что ключ принадлежит именно этому T, и тогда тип результата можно будет вычислить из пары «объект и ключ».
Подробнее: Keyof Type Operator — справочник TypeScript.
Добавь второй параметр типа для ключа, ограниченный ключами T, и опиши тип результата через индексный доступ. age должен получиться number, name строкой, а вызов с "email" должен стать ошибкой. Тело функции и вызовы менять не нужно.