В чем разница между Literal Types и Enum в TypeScript

«В чем разница между Literal Types и Enum в TypeScript» — вопрос из категории TypeScript, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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;

Ключевые различия:

  1. Literal Types - только типы, Enum - реальные значения в runtime
  2. Enum можно использовать как объект (Direction.Left), Literal Types - нет
  3. Enum поддерживает reverse mapping для числовых значений
  4. Literal Types проще в использовании и не генерируют лишний код

Выбор зависит от потребностей: если нужны только типы - Literal Types, если нужны реальные значения - Enum.