枚举
-
数字枚举
// up使用的初始为1,其余的成员自动增长 enum direction { up = 1, down, left, right } // 不使用初始化器,自增长,初始值为0 // 枚举成员的值都是不同的
-
字符串的枚举
在字符串枚举里,每个成员都必须用字符串字面量,或另一个字符串枚举成员进行初始化
enum direction { up="up", down="down", left="left", right="right" }
-
异构枚举
枚举可以混合字符串和数字成员
enum mix { no = 0, yes = "yes" }
-
计算的和常量成员
每个枚举成员都带有一个值,它可以是常量或计算出来
// 枚举的第一个成员且没有初始化器,这种情况下被赋值为0 enum E { x } // 不带初始化器且它之前的枚举成员是一个数字常量,在此基础上+1 enum E2 = { x: 1, y, z } //
-
联合枚举与枚举成员的类型
存在一种特殊的费计算的常量枚举成员的子集:字面量枚举成员。字面量枚举成员是指不带有初始值的常量枚举成员
enum kinds { circle, square } interface circle { kind: kinds.circle } interface square { kind: kinds.circle }
-
运行时的枚举
枚举是在运行时真正存在的对象
enum E { x, y, z } function f(obj: {x: number}){ return obj.x } f(E)
反向映射:从枚举值得到枚举名字
enum Enum { A } let a = Enum.A let nameOfA = Enum[a] // 'A'
const
枚举:为了避免在额外生成的代码上的开销和额外的非直接的对枚举成员的访问const enum Enum { A = 1, B = A * 2 }
-
外部枚举
外部枚举用来描述已经存在的枚举类型的形状
declare enum Enum { A = 1, B, C = 2 }
外部枚举和非外部枚举之间有一个重要的区别,在正常的枚举里,没有初始化方法的成员被当成常数成员。 对于非常数的外部枚举而言,没有初始化方法时被当做需要经过计算的。