Hack Frontend Community

Что такое enum (перечисление) в TypeScript

Что такое enum?

enum (enumeration, перечисление) — это тип данных в TypeScript, который позволяет объявить набор именованных констант. Перечисления делают код более выразительным и помогают избежать «магических» строк или чисел.

enum Status {
  Pending,
  InProgress,
  Done
}

Числовые и строковые enum’ы

По умолчанию перечисления числовые: первый элемент имеет значение 0, каждый следующий увеличивается на 1. Можно задать стартовое значение или присваивать значения вручную.

enum Status {
  Pending = 1,
  InProgress = 3,
  Done = 4
}

Строковые enum’ы задаются явно:

enum Role {
  Admin = 'admin',
  User = 'user'
}

Обратное отображение

Для числовых enum’ов TypeScript создаёт объект с двухсторонним мэппингом, поэтому по значению можно получить имя:

enum Status {
  Pending,
  Done
}

Status.Pending   // 0
Status[0]        // 'Pending'

У строковых перечислений обратного отображения нет.

const enum

Ключевое слово const перед enum говорит компилятору «inline-ить» значения и не создавать объект в результирующем JS-коде. Это уменьшает размер бандла, но лишает возможности обратного отображения.

const enum Directions {
  Up,
  Down
}

const move = Directions.Up  // будет подставлено число 0

Когда использовать

  • Когда есть фиксированный набор состояний (статусы, роли, типы сообщений).
  • Когда один и тот же набор значений используется в разных местах.
  • Когда нужно более читаемое API, чем набор строк/чисел.

На собеседовании:

Упомяните, что enum — это синтаксический сахар вокруг объектов, что у них есть числовая и строковая формы, а также const enum для оптимизации.