learn-typescript

枚举

定义

枚举用来为一组数字常量赋予友好的名称。使用 enum 关键字来定义枚举。

enum Direction {
  Up = 1,
  Down,
  Left,
  Right
}

let a = Direction.Up
console.log(a)  // 1

枚举类型可以包含零个或多个枚举成员。
枚举成员是一个数字值。它可以是 常数 或者 计算得出的值

enum FileAccess {
  // 常数
  None,
  Read = 1 << 1,
  Write = 1 << 2,
  ReadWrite = Read | Write
  // 计算得出的值
  G = '123'.length
}

反向映射

可以从枚举值反向映射获取到枚举名称:

enum Enum {
  A
}

let a = Enum.A  // a = 0
let nameOfA = Enum[a]  // nameOfA = 'A'

常数枚举

常数枚举是在 enum 关键字前面加上 const 。常数枚举不允许有 计算成员, 会被内联到使用它的地方,并且常数枚举在编译阶段会被删除,可以避免多余的代码和间接引用。

const enum Response {
  Ok = 200,
  NotFound = 404
}

let resArr: Response[] = [Response.Ok, Response.NotFound]

console.log(resArr)  // [ 200, 404 ]

生成后的代码没有了枚举类型转换后的对象,枚举成员被内联到使用过的地方:

var resArr = [200 /* Ok */, 404 /* NotFound */];

外部枚举

外部枚举用来描述已经存在的枚举类型的结构:

declare enum Enum {
  A = 1,
  B,
  C = 2
}

外部枚举的特殊点: 没有初始化方法的成员会被当作 计算成员