Numeric enums
- 默认从 0 开始,指定了数字字后,后面的枚举的值自动基于该值递增
- 枚举即也是类型
enum Direction {
Up = 1,
Down,
Left,
Right,
}
let a:Direction
String enums
enum Direction {
Up = "UP",
Down = "DOWN",
Left = "LEFT",
Right // Error: 字符串类型没有自动递增,必须初始化
}
Heterogeneous enums
数字类型跟字符串类型的枚举可以混用。同事枚举的值可以是动态计算出来的,可以不是常量
Enums at compile time
枚举实际上市对象,所以可以当做值使用
Reverse mappings
对于数字类型的枚举,会创建 Reverse mappings。但对字符串不会生效
enum Enum {
A
}
----------------------转换后
(function (Enum) {
Enum[Enum["A"] = 0] = "A";
})(Enum || (Enum = {}));
---------------------访问
Enum['A'] === Enum.A === Enum[0]
const enums
- 与常规枚举不同,它们在编译期间会被完全删除。
- const枚举可以动态计算,但是只能使用常量枚举表达式
const enum Enum {
A = 1,
B = A * 2,
}
const enum Direction {
Up,
Down,
Left,
Right,
}
let directions = [
Direction.Up,
Direction.Down,
Direction.Left,
Direction.Right,
];
上面编译过后如下:
"use strict";
let directions = [
0 /* Up */,
1 /* Down */,
2 /* Left */,
3 /* Right */,
];