枚举
// enum关键字,使用枚举可以定义一些有名字的数字常量
// 枚举类型可以包含零个或多个枚举成员,可以是 常数或是计算得出的值
// 枚举成员的值为上一个枚举成员的值加1,第一个枚举元素没有初始化方法,那么它的初始值为 0
enum Direction {
UP = 1,
DOWN, // 2
LEFT, // 3
RIGHT, // 4
}
enum FileAccess { // 使用表达式
None, // 0
Read = 1 << 1, // 2
Write = 1 << 2, // 4
ReadWrite = Read | Write,
G = '123'.length
}
// 枚举是在运行时真正存在的一个对象,它包含双向映射(name -> value)和(value -> name),
// Enum[Enum["A"] = 0] = "A" : Enum = {0: "A", A: 0}
console.log(FileAccess);
console.log(FileAccess.G); // 枚举使用
常数枚举
// 为了避免生成多余的代码和间接引用,可以使用常数枚举
const enum Enum {
A = 1,
B = A * 2,
}
//console.log(Enum); // 'const' enums can only be used in property or index access expressions or the right hand side of an import declaration or export assignment.
console.log(Enum.B); // 常数枚举只能使用常数枚举表达式,它们在编译阶段会被删除, 编译后是console.log(2 /* B */);
外部枚举
// 外部枚举
// 描述已经存在的枚举类型的形状
// 外部枚举和非外部枚举之间有一个重要的区别,在正常的枚举里,没有初始化方法的成员被当成常数成员。
// 对于非常数的外部枚举而言,没有初始化方法时被当做需要经过计算的。
declare enum Enum { // 测试不通
A = 10,
B,
C = 12,
}