Ответ
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. Выбирай, не ошибёшься.