枚举

可以定义一些带名字的常量,使用枚举可以清除地表达意图或创建一组有区别的用例。TypeScript支持数字的基于字符串的枚举。

数字枚举

  1. enum Direction {
  2. up = 1,
  3. down,
  4. left,
  5. right
  6. }

如上定义了up使用初始化为0,其余的会从1开始自动增长。
可以不用初始化器

enum Direction {
    up,
  down,
  left,
  right
}

现在up值为0,down的值为1等等。当我们不在乎成员的值的时候,这种自增长的行为是很有用处的,但是要注意每个枚举成员的值都是不同的。

通过枚举的属性来访问枚举成员,和枚举的名字来访问枚举类型:

enum Response {
        No = 0 ,
    Yes = 1 ,
}

function responed(recipient: string, message: Response) : void {
        // .......
}

respond('Princess' , Response.Yes)

错误写法:

enum res {
    A = getSomeValue(),
  B , // error 会报错
}

字符串枚举

字符串枚举的概念很简单,但是有细微的运行时的差别。在一个字符串枚举里,每个成员都必须用字符串字面量,或另外一个字符串枚举成员进行初始化。

enum Direction {
    Up = "UP",
    Down = "DOWN",
    Left = "LEFT",
    Right = "RIGHT",
}

由于字符串枚举没有自增长的行为,字符串枚举可以很好的序列化。换句话说。如果你正在调试并且必须要读一个数字枚举的运行时的值,这个值通常很难读的-它并不能表达有用的信息(尽管反向映射会有所帮助),字符串枚举允许你提供一个运行时有意义的并且可读的值,独立于枚举成员的名字。

异构枚举

可以混合数字枚举和字符串枚举(一般不会这么用的)

enum Direction {
        No = 0 ,
    Yes = 'Yes'
}