Вопрос проверяет умение использовать generics и keyof для безопасного доступа к свойствам объекта.
Функцию типизируют с помощью generic-параметров и keyof. Ключ ограничивается ключами объекта, а тип возвращаемого значения зависит от переданного ключа. Это позволяет TypeScript точно вывести тип и предотвратить доступ к несуществующим свойствам. Такой подход делает код безопасным и самодокументируемым.
Задача — связать тип ключа с типом значения объекта.
keyof T — объединение всех ключей объекта T.
T[K] — тип значения по ключу K.
function getValue<T, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key];
}
const user = {
id: 1,
name: "Alex",
active: true,
};
const name = getValue(user, "name"); // string
const active = getValue(user, "active"); // boolean
Нельзя передать несуществующий ключ.
Тип результата зависит от ключа.
Работает автодополнение в IDE.
function bad(obj: any, key: string) {
return obj[key];
}
Минусы:
Нет проверки ключей.
Потеря типов.
Возможные runtime-ошибки.
Использование keyof и generic-параметров — стандартный способ типобезопасного доступа к свойствам объекта в TypeScript.