enum类型是对JavaScript标准数据类型的一个补充。 像C#等其它语言一样,使用枚举类型可以为一组数值赋予友好的名字。
数字枚举
例如 红绿蓝 Red = 0 Green = 1 Blue= 2 分别代表红色0 绿色为1 蓝色为2
enum Color {Red, Green, Blue}
let c: Color = Color.Green; // c=0
这样写就可以实现,因为ts定义的枚举中的每一个组员默认都是从0开始的,所以也就是
enum Color { Red = 0, Green = 1, Blue = 2 }
增长枚举,可以手动的指定成员的数值。 例如,我们将上面的例子改成从 1开始编号:
enum Color { Red = 1, Green, Blue }
Red使用初始化为 1。 其余的成员会从 1开始自动增长,Green为 2,Blue为 3。
字符串枚举
在一个字符串枚举里,每个成员都必须用字符串字面量,或另外一个字符串枚举成员进行初始化。
enum Color{
Red = 'red',
Green = 'green',
BLue = 'blue'
}
由于字符串枚举没有自增长的行为,字符串枚举可以很好的序列化。
异构枚举
定义一个枚举A,定义一个接口B,他有一个属性aa,值为A.a
声明对象的时候要遵循这个规则
enum A{
a,
b
}
interface B{
aa:A.a
}
let obj:B={
aa:A.a
}
const枚举
let 和var 都是不允许的声明,只能使用const,常量枚举通过在枚举上使用 const修饰符来定义、
const 声明的枚举会被编译成常量
const enum A {
a = 1,
b = 'yes'
}
let c: number = 0
if (c === A.a) {
console.log('yes');
}
普通声明的枚举编译完后是个对象
enum A{
a=1,
b='yes'
}
反向映射
它包含了正向映射( name -> value)和反向映射( value -> name)
要注意的是 不会为字符串枚举成员生成反向映射。
enum Color {Red, Green, Blue}
let a:Color=Color.Red; // 0
let b=Color[a] // Red
console.log(a,b);