В чем разница между Enum и Union

Ответ

Enum (перечисление) — это тип, представляющий набор именованных констант. В TypeScript он компилируется в объект, позволяя обращаться к значениям по ключам и наоборот.

enum Direction {
  Up = 'UP',
  Down = 'DOWN'
}

Union (объединение) — это тип, который может быть одним из нескольких типов. Используется для описания переменной, которая может принимать разные значения.

type Status = 'success' | 'error' | 'pending';

Разница:

  • Enum создает новый тип и объект в рантайме, Union — только тип.
  • Enum значения можно итерировать, Union — нет.
  • Union более гибкий, так как позволяет объединять любые типы (string | number), а Enum — только конкретные значения.

Ответ 18+ 🔞

Да ты посмотри, какой народ-то пошёл — всё им разжуй да в рот положи! Ладно, слушай сюда, разберём эту дичь.

Вот есть у тебя, например, такая хуйня как Enum. Представь, что ты создаёшь свой маленький закоулочек в коде, где всё по полочкам. Назвал — и всё, блядь, точка. Как в армии: "Налево!" — это 'LEFT', "Направо!" — это 'RIGHT'. Создал один раз — и потом тыкаешься в эти константы, как слепой крот. И главное — после компиляции эта штука остаётся в коде живым объектом, её можно потрогать, перебрать, всё дела.

enum Direction {
  Up = 'UP', // Вверх, сука!
  Down = 'DOWN' // Вниз, блядь!
}

А теперь смотри на этого хитрожопого родственника — Union type. Это ж не тип даже, а так, сброд какой-то, шаражка! Объявил, что переменная может быть или 'success', или 'error', или 'pending' — и сиди, гадай, что же тебе сегодня прилетит. Гибкость — овердохуища, но и порядок, как у мартышки в зоопарке.

type Status = 'success' | 'error' | 'pending'; // А хрен его знает, что будет!

А теперь, блядь, разница, чтоб ты понял:

  • Enum — это как построить себе сарайчик в рантайме. Он есть, его можно потрогать, по нему можно пройтись циклом. Union — это просто бумажка с надписью "можно вот эти три штуки", её в рантайме и нет вовсе, чисто для компилятора.
  • Итерация: Enum — да, пожалуйста, итерируйся на здоровье. Union — нихуя, сиди и перебирай вручную, если надо.
  • Гибкость: Вот тут Union всех нахуй делает. Хочешь string | number | boolean? Да без проблем! А Enum — ну, ты в него только то, что сам засунул, больше ни хуя. Он тебе не всеяден.

Короче, если тебе нужен жёсткий, именованный набор констант, который ещё и в коде жить будет — Enum. Если тебе нужно просто сказать компилятору "смотри, чувак, тут может быть вот это, или вот это, или вот эта хуйня" — Union. Выбирай, не ошибёшься.