TypeScript 中的枚举(enum)
枚举是 TypeScript 为数不多的特性之一,它不是 JavaScript 的类型级扩展。
枚举允许开发人员定义一组命名常量。使用枚举可以更轻松地记录意图,或创建一组不同的案例。TypeScript 提供基于数字和字符串的枚举。
数字类型枚举
- 如果没有定义枚举的值,那么枚举就会从
0
开始递增,每次加1
,例如:
1enum test {
2 A, // A = 0
3 B, // B = 1
4 C // C = 2
5}
- 如果定义枚举值为
Number
类型的数字,那么就会从定义的数字开始递增,例如:
1enum Test {
2 A = 5, // A = 5
3 B, // B = 6
4 C // C = 7
5}
使用数字类型作为标志
枚举的一个很好用途是使用枚举作为标志。这些标志允许你检查一组条件中的某个条件是否为真。考虑如下代码例子, 我们有一组关于
Test
的属性:
1enum Test {
2 None = 0,
3 HasClaws = 1 << 0,
4 CanFly = 1 << 1,
5 EatsFish = 1 << 2,
6 Endangered = 1 << 3
7}
在这里,我们使用了左移的位运算符,将数字 1
的二进制向左移
动位置得到数字0001
、0010
、0100
和1000
(换成十进制结果是:1
, 2
, 4
, 8
)。当你在使用这种标记的时候,这些位运算符 | (或)
、& (和)
、~ (非)
将会是你最好的朋友:
1enum TestFlags {
2 None = 0,
3 HasClaws = 1 << 0,
4 CanFly = 1 << 1
5}
6
7interface Test {
8 flags: TestFlags;
9 [key: string]: any;
10}
11
12function printTestAbilities(test: Test) {
13 var testFlags = test;
14 if (testFlags & TestFlags.HasClaws) {
15 console.log(\'动物有爪子\');
16 }
17 if (testFlags & TestFlags.CanFly) {
18 console.log(\'动物会飞\');
19 }
20 if (testFlags == TestFlags.None) {
21 console.log(\'没有什么\');
22 }
23}
24// 使用
25var test = { flags: AnimalFlags.None };
26printTestAbilities(test); // 没有什么
27animal.flags |= TestFlags.HasClaws;
28printTestAbilities(test); // 动物有爪子
29animal.flags &= ~TestFlags.HasClaws;
30printTestAbilities(test); // 没有什么
31animal.flags |= TestFlags.HasClaws | TestFlags.CanFly;
32printAnimalAbilities(animal); // 动物有爪子, 动物会飞
在这里:
- 我们使用
|=
来添加一个标志; - 组合使用
&=
和~
来清理一个标志; |
来合并标志;
可以组合标志,用来在枚举类型中定义方便快捷的方式,如下:
1enum Test {
2 None = 0,
3 HasClaws = 1 << 0,
4 CanFly = 1 << 1,
5 EatsFish = 1 << 2,
6 Endangered = 1 << 3,
7 Combination =
8}
上一篇:
暂无
下一篇:
TypeScript-Omit-Pick