TypeScript的枚举(enum)是一种特殊的数据类型,允许你定义一组命名的常量。它可以帮助你创建清晰、可读性强的代码,避免使用"魔法数字"或字符串。
一种数据类型,包含一组固定的、命名的值。
1.数字枚举(numeric enum)
这是最常见的枚举类型。枚举成员的值是数字。
基本用法:
-
枚举类型 的内部实现:用数字 来代表一组命名的常量。
-
遍历操作 :在程序中循环处理一个数字序列。
ts
enum Direction {
Up, // 0
Down, // 1
Left, // 2
Right // 3
}
console.log(Direction.Up); // 输出: 0
console.log(Direction[0]); // 输出: "Up" (反向映射)

还可以赋值:
ts
enum StatusCode {
Success = 200,
NotFound = 404,
ServerError = 500,
}
console.log(StatusCode.Success);
console.log(StatusCode.NotFound);
console.log(StatusCode.ServerError);

手动设置:
ts
enum Status {
Off = 0,
On = 1,
Standby = 10, // 手动设置
}
console.log(Status.Off);
console.log(Status.On);
console.log(Status.Standby);

2.字符串枚举(string enum)
特点:
- 更语义化,常用于API响应、状态码等。
- 不支持反向映射(因为字符串到数字的映射不唯一)。
- 所有成员必须有初始值。
ts
enum Color {
Red = "RED",
Green = "GREEN",
Blue = "BLUE",
}
console.log(Color.Red); // 输出: "RED"
console.log(Color["RED"]); //无反向映射,会是 undefined

3.异构枚举(heterogeneous enum) 不推荐别用了
混合使用数字和字符串成员(不推荐,容易造成混乱)。
ts
enum Mixed {
No = 0,
Yes = "YES",
}
console.log(Mixed[0]);
console.log(Mixed.Yes);

4.常量枚举(const enum)
使用const enum 声明,编译时会被完全移除,内联到使用的地方。
特点:
- 提升性能,减少生成的js代码。
- 没有运行对象,因此不能使用Direction【0】这样的反向查找。
- 必须在编译时就能确定所有值。
ts
const enum Direction {
Up,
Down,
Left,
Right,
}
let move = Direction.Up; // 编译后变成: let move = 0;
console.log(move)

5.计算枚举成员(computed enum members)
枚举成员的值可以是计算表达式。
注意:
- 计算成员不能用于
const enum
。 - 如果有计算成员,就不能使用反向映射。
ts
function getStart() {
return 1;
}
enum Computed {
A = getStart(),
B = A + 1,
C = "foo".length,
}
// 打印方式任选其一:
console.log("A =", Computed.A);
console.log("B =", Computed.B);
console.log("C =", Computed.C);
// 或者
console.log(Computed);
// 或者
for (let key in Computed) {
if (isNaN(Number(key))) {
console.log(`${key} = ${Computed[key]}`);
}
}

枚举的使用场景:
- 状态码
ts
httpStatus.Success,httpStatus.NotFound
- UI状态
ts
loadingState.Loading,loadingState.Success
- 配置选项
ts
Theme.Light,Theme.Dark
- 协议类型
ts
Protocol.Http,Protocol.Ws