Что такое литеральные типы в TypeScript?
Базовые типы
Литеральный тип — тип, у которого единственно допустимое значение: конкретная строка, число или true/false. Он сужает тип вроде string до точного набора значений.
let direction: 'left' | 'right' = 'left';
direction = 'up'; // ошибка
type Status = 'idle' | 'loading' | 'error';
type Dice = 1 | 2 | 3 | 4 | 5 | 6;Где применяют
- Замена
enum: набор допустимых строк через union. - Дискриминантные поля в объединениях:
{ type: 'success'; data: T } | { type: 'error'; message: string }. - Типизация параметров:
function setAlign(a: 'left' | 'center' | 'right'). - Шаблонные литеральные типы: `
type Event =on${Capitalize<string>}`.
Расширение типа
const a = 'hello'; // тип 'hello'
let b = 'hello'; // тип string
const obj = { mode: 'dark' }; // mode: string, а не 'dark'Свойства изменяемого объекта и переменные let расширяются до string. Чтобы сохранить литерал, используют as const или satisfies.
Коротко для собеседования
Литеральный тип допускает одно конкретное значение. В union они дают набор вариантов, используются как замена enum и дискриминанты. Литерал расширяется до string для let и свойств объектов, поэтому нужны as const или satisfies.