Как использовать перечисления в TypeScript шаг за шагом

Перечисления в TypeScript — это способ определить набор именованных констант, которые можно использовать для представления коллекции связанных значений. Они делают код более читаемым и поддерживаемым, давая этим значениям понятные имена. Это руководство шаг за шагом проведет вас через использование перечислений в TypeScript, охватывая их типы, преимущества и практические примеры.

Что такое Enum?

enum (сокращение от "enumeration") — это специальный тип данных в TypeScript, который позволяет вам определять набор именованных констант. Эти именованные константы могут представлять числовые или строковые значения, делая ваш код более описательным и менее подверженным ошибкам.

Типы перечислений в TypeScript

В TypeScript существует три типа перечислений:

  • Числовые перечисления
  • Перечисления строк
  • Гетерогенные перечисления

Числовые перечисления

Числовые перечисления являются значениями по умолчанию в TypeScript. Они представляют собой набор именованных значений, которым автоматически присваиваются числовые значения, начиная с 0 или с пользовательского начального значения, если оно указано.

Пример простого числового перечисления

Ниже приведен простой пример числового перечисления:

enum Direction {
  Up,
  Down,
  Left,
  Right
}

let move: Direction = Direction.Up;
console.log(move); // Output: 0

В этом примере перечисление Direction имеет четыре члена: Up, Down, Left и Right. По умолчанию Up присваивается значение 0, Down1 и т. д. Вы также можете указать пользовательские числовые значения для членов.

Числовое перечисление с пользовательскими значениями

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

enum Status {
  New = 1,
  InProgress,
  Done = 5,
  Cancelled
}

console.log(Status.New); // Output: 1
console.log(Status.InProgress); // Output: 2
console.log(Status.Done); // Output: 5
console.log(Status.Cancelled); // Output: 6

В этом примере New устанавливается на 1, InProgress автоматически устанавливается на 2, Done устанавливается на 5, а Cancelled автоматически устанавливается на 6.

Перечисления строк

Строковые перечисления — это еще один тип перечислений, в которых каждый член инициализируется строковым литералом, что делает их более читабельными и простыми в отладке.

Пример простого перечисления строк

Ниже приведен пример строкового перечисления:

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

let move: Direction = Direction.Left;
console.log(move); // Output: "LEFT"

В этом примере каждый член перечисления инициализируется строковым значением. В отличие от числовых перечислений, строковые перечисления не имеют автоинкрементных значений.

Гетерогенные перечисления

Гетерогенные перечисления — это перечисления, которые содержат как строковые, так и числовые элементы. Хотя их можно определить, обычно это не рекомендуется, поскольку это может привести к путанице и ошибкам в коде.

Пример гетерогенного перечисления

Вот пример неоднородного перечисления:

enum MixedEnum {
  Yes = "YES",
  No = 0,
  Maybe = 1
}

console.log(MixedEnum.Yes); // Output: "YES"
console.log(MixedEnum.No); // Output: 0

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

Варианты использования Enum

Перечисления полезны в различных сценариях:

  • Представление набора связанных констант, таких как направления (вверх, вниз, влево, вправо).
  • Определение состояний в конечном автомате (Новое, В процессе, Выполнено, Отменено).
  • Используйте их в операторах switch-case для лучшей читабельности.

Пример Enum в switch-case

Использование перечислений в операторе switch-case улучшает читаемость кода и упрощает управление состояниями.

enum Status {
  New,
  InProgress,
  Done,
  Cancelled
}

function getStatusMessage(status: Status): string {
  switch (status) {
    case Status.New:
      return "The task is new.";
    case Status.InProgress:
      return "The task is in progress.";
    case Status.Done:
      return "The task is completed.";
    case Status.Cancelled:
      return "The task is cancelled.";
    default:
      return "Unknown status.";
  }
}

console.log(getStatusMessage(Status.InProgress)); // Output: "The task is in progress."

В этом примере оператор switch-case более удобочитаем и менее подвержен ошибкам благодаря использованию перечислений.

Заключение

Перечисления в TypeScript предоставляют мощный способ определения набора именованных констант, улучшая читаемость кода и безопасность типов. Используя числовые, строковые или даже гетерогенные перечисления, вы можете лучше управлять и организовывать свой код. С этим пошаговым руководством вы теперь должны быть уверены в использовании перечислений в TypeScript, чтобы сделать свой код чище и более поддерживаемым.