Что такое Record в TypeScript?
Utility Types
`Record<K, V>` — тип объекта, у которого ключи типа K, а значения типа V.
type Role = 'admin' | 'editor' | 'viewer';
const permissions: Record<Role, string[]> = {
admin: ['read', 'write', 'delete'],
editor: ['read', 'write'],
viewer: ['read'],
};Если ключи — union литералов, TypeScript потребует все ключи: пропустить viewer не получится.
Как устроен
type Record<K extends keyof any, T> = { [P in K]: T };Где применяют
- словари:
Record<string, number>; - таблицы соответствия для union (конфиги, переводы, маппинги статусов на цвета).
Нюанс
Record<string, User> обещает, что по любому ключу есть значение, хотя на практике его может не быть. Для честности включают noUncheckedIndexedAccess или используют Partial<Record<…>> / Map.
Коротко для собеседования
Record<K, V> — объект с ключами K и значениями V; с union-ключами требует заполнить все варианты.
Подробнее: TypeScript — Utility Types