Перечисление TypeScript
Enum — очень полезная возможность в TypeScript, которая позволяет определять набор именованных констант. Перечисления могут сделать код более читаемым и удобным в сопровождении, заменяя «магические числа» осмысленными именами.
Числовое перечисление
По умолчанию элементы перечислений нумеруются начиная с 0.
Пример
Вверх, // 0
Down, // 1
По левому краю, // 2
Вправо // 3
}
var dir: Direction = Direction.Up;
console.log("Направление: " + dir);
console.log("Имя направления: " + Direction[0]);
Вывод:
方向: 0 方向名称: Up
Ручное присваивание
Вы можете вручную присваивать значения членам перечисления.
Пример
Успех = 1,
Ошибка = 2,
В ожидании = 3
}
console.log("Статус: " + Status.Success);
console.log("Имя статуса: " + Status[1]);
Вывод:Fortune
Status: 1 状态名称: Success
Строковый enum
В строковых enum каждый член должен иметь строковое литеральное значение.
Пример
Success = "SUCCESS",
Error = "ERROR",
Warning = "WARNING"
}
console.log("Message: " + Message.Success);
Вывод:
Message: SUCCESS
Константный enum
ИспользованиеconstПеречисления, модифицированные с помощью const, встраиваются во время компиляции, генерируя более оптимизированный код.
Пример
Red = "RED",
Green = "GREEN",
Blue = "BLUE"
}
var favoriteColor: Color = Color.Red;
console.log("Любимый цвет: " + favoriteColor);
Гетерогенное перечисление
Перечисления могут смешивать числовые и строковые значения, но это не рекомендуется.
Пример
Нет = 0,
Yes = "YES"
}
console.log("Значение: " + BooleanLikeHeterogeneousEnum.No);
console.log("Строковое значение: " + BooleanLikeHeterogeneousEnum.Yes);
Типы членов перечисления
Когда все члены перечисления являются литеральными значениями, тип члена можно использовать как тип.
Пример
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));
Перечисления во время выполнения
Обычные перечисления сохраняются как реальные объекты во время выполнения.
Пример
Read = 1 << 1,
Write = 1 << 2,
ReadWrite = Read | Write
}
console.log("Доступ к файлу: " + FileAccess.ReadWrite);
Вывод:
文件访问: 6
Итог
- Числовые перечисления:По умолчанию начинается с 0, можно задать вручную.
- Строковые перечисления:Каждый член должен быть строковым литералом.
- Константные перечисления:Используйте const, встраиваются во время компиляции.
- Гетерогенные перечисления:Смешивание чисел и строк, не рекомендуется.
- Типы членов:Литеральные члены перечисления можно использовать как типы.