Ответ
Literal Types позволяют указывать конкретные значения (строки, числа, булевы) как тип. Они полезны для ограничения возможных значений переменной:
type Direction = 'left' | 'right' | 'up' | 'down';
const move: Direction = 'left'; // OK
const move: Direction = 'diagonal'; // Error
Enum создает именованную группу констант, которая может быть числовой или строковой:
enum Direction {
Left = 'LEFT',
Right = 'RIGHT'
}
const dir: Direction = Direction.Left;
Ключевые различия:
- Literal Types - только типы, Enum - реальные значения в runtime
- Enum можно использовать как объект (Direction.Left), Literal Types - нет
- Enum поддерживает reverse mapping для числовых значений
- Literal Types проще в использовании и не генерируют лишний код
Выбор зависит от потребностей: если нужны только типы - Literal Types, если нужны реальные значения - Enum.