Назад к вопросам
IT One
Middle+
1
const X = { a: 1, b: 2, c: 3, d: 4 } function getProperty(obj, key) { // Задача типизировать функцию return obj[key] } getProperty(X, 'a') // нет ошибки getProperty(X, 'r') // ошибка ключ r не является ключем для объекта X getProperty({ name: 'Sergey' }, 'name') // нет ошибки
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Чтобы типизировать функцию getProperty так, чтобы ключ был строго из ключей объекта, можно использовать дженерики с ограничением ключа через keyof:
const X = { a: 1, b: 2, c: 3, d: 4 };
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key];
}
getProperty(X, 'a'); // Ок
getProperty(X, 'r'); // Ошибка: 'r' не является ключом X
getProperty({ name: 'Sergey' }, 'name'); // Ок
Здесь K extends keyof T гарантирует, что ключ key принадлежит объекту obj, а возвращаемый тип соответствует типу значения по этому ключу.