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










网友评论