Enums
使得我们能够定义有名字的数字常量集
enum Direction {
Up = 1,
Down, // 2
Left, // 3 以此类推
Right
}
枚举体包含0个或多个枚举成员。枚举成员都对应一个数字值,这个数字值可以是constant
或者computed
一个枚举值是constant
,满足一下条件
- 它没有进行初始化,而且它的前一个枚举值是常量,那么它对应的数字常量值为前一个枚举值对应的数字常量值
+1
- 被一个常量枚举表达式初始化-是TypeScript表达式的子集,在编译时计算。满足以下条件就为
constant enum expression
- 数字字面量
- 引用此枚举体或者其他枚举体里面的
constant enum member
- 带括号的
constant enum member
- 使用了
+
、-
、~
的constant enum member
- 使用了
+, -, *, /, %, <<, >>, >>>, &, |, ^
等二元操作符,并使用constant enum member
作操作数
如果constant enum member
计算为NaN
或者Infinity
则报编译时错误。
其他情况下的枚举成员都认为是被计算的
enum FileAccess {
// constant members
None,
Read = 1 << 1,
Write = 1 << 2,
ReadWrite = Read | Write,
// computed member
G = "123".length
}
一个枚举在运行时实际上是一个对象。
const enum
大多数情况上使用regular enum
,但是如果对于性能有要求,则选择const enum
,const enum
都是内联的成员。
const enum Directions {
Up,
Down,
Left,
Right
}
let directions = [Directions.Up, Directions.Down, Directions.Left, Directions.Right]
Ambient enums
用于描述已经存在的enum types
的形状
declare enum Enum {
A = 1,
B,
C = 2
}
最重要的不同就是,在non-ambient
,中,regular enum
中没有初始化的成员为constant member
,而在non-const ambient
没有初始化的成员为computed member