1
1
# 枚举
2
2
3
3
使用枚举我们可以定义一些有名字的数字常量。
4
- 枚举通过使用 ` enum ` 关键字定义 。
4
+ 枚举通过 ` enum ` 关键字来定义 。
5
5
6
6
``` ts
7
7
enum Direction {
@@ -13,26 +13,25 @@ enum Direction {
13
13
```
14
14
15
15
一个枚举类型可以包含零个或多个枚举成员。
16
- 枚举成员具有一个数字值,它们可以是 * 常数* 或 * 通过计算得出的值 *
17
- 当满足如下条件时,枚举成员被当成是常数 :
16
+ 枚举成员具有一个数字值,它可以是 * 常数* 或是 * 计算得出的值 *
17
+ 当满足如下条件时,枚举成员被当作是常数 :
18
18
19
- * 不具有初始化函数并且前面的枚举成员是常数 。
19
+ * 不具有初始化函数并且之前的枚举成员是常数 。
20
20
在这种情况下,当前枚举成员的值为上一个枚举成员的值加1。
21
- 一个例外情况就是枚举的第一个元素 。
21
+ 但第一个枚举元素是个例外 。
22
22
如果它没有初始化方法,那么它的初始值为` 0 ` 。
23
- * 枚举成员使用常数枚举表达式初始化 。
24
- 常数枚举表达式是TypeScript表达式的子集,完全可以在编译阶段求值 。
23
+ * 枚举成员使用 * 常数枚举表达式 * 初始化 。
24
+ 常数枚举表达式是TypeScript表达式的子集,它可以在编译阶段求值 。
25
25
当一个表达式满足下面条件之一时,它就是一个常数枚举表达式:
26
26
* 数字字面量
27
- * 引用前面定义的常数枚举成员(可以是在不同的枚举类型中定义的)
28
- 如果这个成员是在同一个枚举类型中定义的,可以使用非限定名引用。
29
- * parenthesized constant enum expression
27
+ * 引用之前定义的常数枚举成员(可以是在不同的枚举类型中定义的)
28
+ 如果这个成员是在同一个枚举类型中定义的,可以使用非限定名来引用。
30
29
* 带括号的常数枚举表达式
31
- * ` + ` , ` - ` , ` ~ ` 一元运算符应用到常数枚举表达式
32
- * ` + ` , ` - ` , ` * ` , ` / ` , ` % ` , ` << ` , ` >> ` , ` >>> ` , ` & ` , ` | ` , ` ^ ` 二元运算符,常数枚举表达式做为一个操作对象
33
- 若常数枚举表达式求值后为` NaN ` 或` Infinity ` ,会在编译阶段报错 。
30
+ * ` + ` , ` - ` , ` ~ ` 一元运算符应用于常数枚举表达式
31
+ * ` + ` , ` - ` , ` * ` , ` / ` , ` % ` , ` << ` , ` >> ` , ` >>> ` , ` & ` , ` | ` , ` ^ ` 二元运算符,常数枚举表达式做为其一个操作对象
32
+ 若常数枚举表达式求值后为` NaN ` 或` Infinity ` ,则会在编译阶段报错 。
34
33
35
- 所有其它情况的枚举成员被当成需要计算的 。
34
+ 所有其它情况的枚举成员被当作是需要计算得出的值 。
36
35
37
36
``` ts
38
37
enum FileAccess {
@@ -46,8 +45,8 @@ enum FileAccess {
46
45
}
47
46
```
48
47
49
- 枚举是在运行时真正存在的对象 。
50
- 其中一个原因是可以从枚举值到枚举名进行反射映射 。
48
+ 枚举是在运行时真正存在的一个对象 。
49
+ 其中一个原因是因为这样可以从枚举值到枚举名进行反向映射 。
51
50
52
51
``` ts
53
52
enum Enum {
@@ -68,9 +67,9 @@ var a = Enum.A;
68
67
var nameOfA = Enum[Enum .A ]; // "A"
69
68
```
70
69
71
- 生成的代码中,枚举类型被编译成一个对象,它包含双向的映射 (` name ` -> ` value ` )和(` value ` -> ` name ` )。
72
- 引用枚举成员总会生成一个属性访问并且永远不会内联 。
73
- 在大多数情况下这是很完美并正确的解决方案 。
70
+ 生成的代码中,枚举类型被编译成一个对象,它包含双向映射 (` name ` -> ` value ` )和(` value ` -> ` name ` )。
71
+ 引用枚举成员总会生成一次属性访问并且永远不会内联 。
72
+ 在大多数情况下这是很好的并且正确的解决方案 。
74
73
然而有时候需求却比较严格。
75
74
当访问枚举值时,为了避免生成多余的代码和间接引用,可以使用常数枚举。
76
75
常数枚举是在` enum ` 关键字前使用` const ` 修饰符。
@@ -82,8 +81,8 @@ const enum Enum {
82
81
}
83
82
```
84
83
85
- 常数枚举只能使用常数枚举表达式并且不同于常规的枚举,它们在编译阶段会被删除 。
86
- 常数枚举成员在使用的地方被内联起来 。
84
+ 常数枚举只能使用常数枚举表达式并且不同于常规的枚举的是它们在编译阶段会被删除 。
85
+ 常数枚举成员在使用的地方被内联进来 。
87
86
这是因为常数枚举不可能有计算成员。
88
87
89
88
``` ts
0 commit comments