keyof / typeof
Тройка операторов уровня типов. keyof T — union ключей, typeof v — тип значения, T[K] — индексный доступ. На интервью просят написать type-safe get(obj, key) и получить тип из runtime-объекта (например, из as const словаря).
Связка из трёх:
const ROUTES = { home: '/', about: '/about', user: '/u/:id',} as const;
// 1) typeof — тип значенияtype Routes = typeof ROUTES;// 2) keyof — union ключейtype Key = keyof Routes; // 'home' | 'about' | 'user'// 3) indexed access — тип значения по ключуtype HomePath = Routes['home']; // '/'
function go<K extends Key>(k: K): Routes[K] { return ROUTES[k]; }const a = go('home'); // '/' (literal)keyof у индексных типов даёт string/number:
type Dict = { [k: string]: number };type K1 = keyof Dict; // string | number (number потому что 'a'->'a'== 'a' ключ)
type Arr = number[];type K2 = keyof Arr; // number | 'length' | 'push' | ...Итог: keyof typeof obj + indexed access = «вытащить тип из существующего рантайм-значения».