TypeScript Перечисления

Перечисления (enum) — это особый тип "класса", который представляет группу констант (неизменяемых переменных).

Существует два типа перечислений: строковые и числовые.

Начнём с числовых.


Числовые перечисления - По умолчанию

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

Пример


enum CardinalDirections {
  North,
  East,
  South,
  West
}

let currentDirection = CardinalDirections.North;
// выводит 0
console.log(currentDirection);
// вызывает ошибку, так как 'North' — это не допустимая константа перечисления
currentDirection = 'North'; // Ошибка: "North" нельзя назначить типу 'CardinalDirections'.


Числовые перечисления - С инициализацией

Вы можете явно задать начальное значение первого элемента перечисления, и последующие значения будут увеличиваться автоматически:

Пример


enum CardinalDirections {
  North = 1,
  East,
  South,
  West
}

// выводит 1
console.log(CardinalDirections.North);
// выводит 4
console.log(CardinalDirections.West);


Числовые перечисления - Полностью инициализированные

Вы можете явно присвоить уникальное числовое значение каждому элементу перечисления.

В этом случае значения не будут автоматически увеличиваться:

Пример


enum StatusCodes {
  NotFound = 404,
  Success = 200,
  Accepted = 202,
  BadRequest = 400
}

// выводит 404
console.log(StatusCodes.NotFound);
// выводит 200
console.log(StatusCodes.Success);


Строковые перечисления

Перечисления могут также содержать строки.

Строковые перечисления более распространены, так как они улучшают читаемость и передают намерение разработчика.

Пример


enum CardinalDirections {
  North = 'North',
  East = "East",
  South = "South",
  West = "West"
};

// выводит "North"
console.log(CardinalDirections.North);
// выводит "West"
console.log(CardinalDirections.West);


Смешивание типов в перечислениях

Технически можно смешивать строковые и числовые значения в одном перечислении, но это не рекомендуется, так как это может снизить читаемость и увеличить вероятность ошибок.