Что такое Keyof?
Продвинутые темы
`keyof` — оператор TypeScript, который возвращает union-тип из всех ключей объектного типа. Он нужен для типобезопасной работы со свойствами.
Что делает
interface User {
id: number;
name: string;
email: string;
}
type UserKeys = keyof User; // 'id' | 'name' | 'email'keyof создаёт union строковых литералов — все имена свойств типа.
Основное применение — типобезопасный доступ
function getProp<T, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key];
}
const user: User = { id: 1, name: 'Ann', email: 'a@b.com' };
getProp(user, 'name'); // тип string
getProp(user, 'age'); // ошибка компиляции — нет такого ключаT[K] — indexed access type: тип значения по ключу.
Комбинации
- С mapped types:
type Optional<T> = { [K in keyof T]?: T[K] };- С
typeof:
const config = { host: 'localhost', port: 3000 };
type ConfigKey = keyof typeof config; // 'host' | 'port'Коротко для собеседования
keyof T возвращает union всех ключей типа (keyof User → 'id' | 'name' | 'email'). Используется для типобезопасного доступа к свойствам (K extends keyof T, T[K]) и в mapped types. Часто вместе с typeof.