Stevv's Blog

Do not go gentle into that good night

TypeScripts中的枚举

枚举是TypeScript 支持的数据类型。枚举允许您定义一组命名常量。使用它们可以更轻松地记录意图或创建一组不同的案例。它们是 TypeScript 的少数功能之一,它不是 JavaScript 的类型级扩展。TypeScript 枚举允许开发人员定义一组命名常量。使用它们可以更轻松地记录意图或创建一组不同的案例。

常见枚举的类型

数字枚举

数字枚举以字符串存储数字值。使用 enum 关键字定义它们,下面存储一组不同类型汽车的示例展示 TypeScript 中的数字枚举:

1
2
3
4
5
6
enum CarType {
Honda,
Toyota,
Subaru,
Hyundai
}

枚举值从 0 开始,并且每个成员的值递增 1 ,Honda = 0 ,Toyota = 1…

如果需要你可以自己初始化第一个数值,如下所示:

1
2
3
4
5
6
enum CarType {
Honda = 1,
Toyota,
Subaru,
Hyundai
}

字符串枚举

字符串枚举类似于数字枚举,但是它们的枚举值是使用字符串值而不是数字值初始化的。字符串枚举比数字枚举具有更好的可读性,从而更容易调试程序。

1
2
3
4
5
6
7
8
9
enum CarType {
Honda = "HONDA",
Toyota = "TOYOTA",
Subaru = "SUBARU",
Hyundai = "HYUNDAI"
}

// 访问字符串枚举
CarType.Toyota; //return TOYOTA

枚举反向映射

枚举可以使用其相对应的枚举成员值检索 num 值。使用反向映射,可以访问成员值和成员值的名称

1
2
3
4
5
6
7
8
9
enum CarType {
Honda = 1,
Toyota,
Subaru,
Hyundai
}
CarType.Subaru; //return 3
CarType.["Subaru"]; //return 3
CarType[3]; //return Subaru

计算枚举

枚举成员的值可以是常量值或计算值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
enum CarType {
Honda = 1,
Toyota = getCarTypeCode('toyota'),
Subaru = Toyota * 3,
Hyundai = 10
}

function getCarTypeCode(carName: string): number {
if (carName === 'toyota') {
return 5;
}
}

CarType.Toyota; // returns 5
CarType.Subaru; // returns 15