枚举用来为一组数字常量赋予友好的名称。使用 enum
关键字来定义枚举。
enum Direction {
Up = 1,
Down,
Left,
Right
}
let a = Direction.Up
console.log(a) // 1
枚举类型可以包含零个或多个枚举成员。
枚举成员是一个数字值。它可以是 常数
或者 计算得出的值
:
enum FileAccess {
// 常数
None,
Read = 1 << 1,
Write = 1 << 2,
ReadWrite = Read | Write
// 计算得出的值
G = '123'.length
}
可以从枚举值反向映射获取到枚举名称:
enum Enum {
A
}
let a = Enum.A // a = 0
let nameOfA = Enum[a] // nameOfA = 'A'
常数枚举是在 enum
关键字前面加上 const
。常数枚举不允许有 计算成员
, 会被内联到使用它的地方,并且常数枚举在编译阶段会被删除,可以避免多余的代码和间接引用。
const enum Response {
Ok = 200,
NotFound = 404
}
let resArr: Response[] = [Response.Ok, Response.NotFound]
console.log(resArr) // [ 200, 404 ]
生成后的代码没有了枚举类型转换后的对象,枚举成员被内联到使用过的地方:
var resArr = [200 /* Ok */, 404 /* NotFound */];
外部枚举用来描述已经存在的枚举类型的结构:
declare enum Enum {
A = 1,
B,
C = 2
}
外部枚举的特殊点: 没有初始化方法的成员会被当作 计算成员
。