Что такое Enum в TypeScript

Ответ

Enum (перечисление) в TypeScript — это способ определения набора именованных констант. Он помогает сделать код более читаемым и поддерживаемым, группируя логически связанные значения.

Пример:

enum Direction {
  Up = 'UP',
  Down = 'DOWN',
  Left = 'LEFT',
  Right = 'RIGHT'
}

const move = (direction: Direction) => {
  console.log(`Moving ${direction}`);
};

move(Direction.Up); // "Moving UP"

Особенности:

  • Может быть числовым (автоинкремент) или строковым
  • Поддерживает reverse mapping для числовых enum
  • Может быть константным (вычисляется во время компиляции) или вычисляемым

Лучше использовать строковые enum для лучшей читаемости и сериализации.

Ответ 18+ 🔞

Слушай, а вот этот ваш Enum в TypeScript — это ж просто пиздец как удобно, ей-богу! Ну представь: есть у тебя куча констант, которые друг дружке родственники, а ты их как бомжей по помойкам раскидал. Так вот, enum — это такой блядский сборный пункт для них, чтоб в коде потом не еб*ть мозг себе и другим.

Вот смотри, как это выглядит, на примере направления:

enum Direction {
  Up = 'UP',
  Down = 'DOWN',
  Left = 'LEFT',
  Right = 'RIGHT'
}

const move = (direction: Direction) => {
  console.log(`Moving ${direction}`);
};

move(Direction.Up); // "Moving UP"

Видал? Красота же, блядь! Вместо того чтобы писать в коде магические строки 'UP', 'DOWN' и гадать, опечатку я сделал или нет, ты просто пишешь Direction.Up. И компилятор тебя уже не пошлёт нахуй, если ты накосячил.

А фишечки у него какие, овердохуища:

  • Числовой он может быть — там значения сами по порядку подтягиваются, как пьяные в очередь за пивом.
  • Строковой — вот как в примере. Его, кстати, чаще советуют, потому что при отладке видно не просто цифру 1, а понятное слово 'UP'. И в JSON сериализуется без всяких плясок с бубном.
  • Есть ещё обратное маппирование для числовых — это когда по значению можно ключ получить, типа Direction[1] вернёт 'Up'. Хитро, да? Но со строковыми так не прокатит.
  • И может он быть константным (всё считается при компиляции, в рантайме его почти нет) или вычисляемым (ну тут уже по обстоятельствам).

Короче, если хочешь не выглядеть как мартышлюшка, которая переменные const UP = 1; const DOWN = 2; объявляет — юзай enum. Для читаемости — строковые. Всё, вопрос закрыт, в рот меня чих-пых.