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

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


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

По умолчанию элементы перечислений нумеруются начиная с 0.

Пример

enum Direction {
    Вверх,    // 0
    Down,  // 1
    По левому краю,  // 2
    Вправо  // 3
}

var dir: Direction = Direction.Up;
console.log("Направление: " + dir);
console.log("Имя направления: " + Direction[0]);

Вывод:

方向: 0
方向名称: Up

Ручное присваивание

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

Пример

enum Status {
    Успех = 1,
    Ошибка = 2,
    В ожидании = 3
}

console.log("Статус: " + Status.Success);
console.log("Имя статуса: " + Status[1]);

Вывод:Fortune

Status: 1
状态名称: Success

Строковый enum

В строковых enum каждый член должен иметь строковое литеральное значение.

Пример

enum Message {
    Success = "SUCCESS",
    Error = "ERROR",
    Warning = "WARNING"
}

console.log("Message: " + Message.Success);

Вывод:

Message: SUCCESS

Константный enum

ИспользованиеconstПеречисления, модифицированные с помощью const, встраиваются во время компиляции, генерируя более оптимизированный код.

Пример

const enum Color {
    Red = "RED",
    Green = "GREEN",
    Blue = "BLUE"
}

var favoriteColor: Color = Color.Red;
console.log("Любимый цвет: " + favoriteColor);

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

Перечисления могут смешивать числовые и строковые значения, но это не рекомендуется.

Пример

enum BooleanLikeHeterogeneousEnum {
    Нет = 0,
    Yes = "YES"
}

console.log("Значение: " + BooleanLikeHeterogeneousEnum.No);
console.log("Строковое значение: " + BooleanLikeHeterogeneousEnum.Yes);

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

Когда все члены перечисления являются литеральными значениями, тип члена можно использовать как тип.

Пример

enum ShapeKind {
    Circle = "circle",
    Square = "square"
}

interface Circle {
    kind: ShapeKind.Circle;
    radius: number;
}

interface Square {
    kind: ShapeKind.Square;
    sideLength: number;
}

var c: Circle = {
    kind: ShapeKind.Circle,
    radius: 10
};

console.log("Circle: " + JSON.stringify(c));

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

Обычные перечисления сохраняются как реальные объекты во время выполнения.

Пример

enum FileAccess {
    Read = 1 << 1,
    Write = 1 << 2,
    ReadWrite = Read | Write
}

console.log("Доступ к файлу: " + FileAccess.ReadWrite);

Вывод:

文件访问: 6

Итог

  • Числовые перечисления:По умолчанию начинается с 0, можно задать вручную.
  • Строковые перечисления:Каждый член должен быть строковым литералом.
  • Константные перечисления:Используйте const, встраиваются во время компиляции.
  • Гетерогенные перечисления:Смешивание чисел и строк, не рекомендуется.
  • Типы членов:Литеральные члены перечисления можно использовать как типы.
Другие расширения