Как ограничить дженерик через extends и keyof?
Дженерики
`extends` задаёт, какому типу должен соответствовать параметр, а `keyof` даёт объединение ключей объекта.
Безопасный доступ к свойству
function getProp<T, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key];
}
const user = { id: 1, name: 'Ann' };
getProp(user, 'name'); // string
getProp(user, 'age'); // ошибка: такого ключа нетЗдесь K ограничен ключами T, а результат T[K] получает точный тип значения.
Ограничение по форме
function merge<A extends object, B extends object>(a: A, b: B): A & B {
return { ...a, ...b };
}Значения по умолчанию
interface ApiResponse<T = unknown> { data: T; status: number }Коротко для собеседования
T extends X требует нужной формы типа, K extends keyof T гарантирует существующий ключ, а T[K] возвращает его точный тип.