Skip to content

enum 枚举

enum 类似于 “字面量类型 + 枚举类型”,表示定义一组命名常量。

ts
enum DirectionEnum {
  Up,
  Down,
  Left,
  Right
}

let direction: DirectionEnum  = 'aa' // 报错:Type '"aa"' is not assignable to type 'DirectionEnum'
let direction2: DirectionEnum = DirectionEnum.Up

数字枚举

枚举值若为数字,则后续枚举值会依次递增,第一个枚举值默认为 0。

ts
enum DirectionEnum {
  Up, // 0
  Down, // 1
  Left, // 2
  Right // 3
}

enum DirectionEnum {
  Up = 10, // 10
  Down, // 11
  Left, // 12
  Right // 13
}

enum DirectionEnum {
  Up = 10, // 0
  Down, // 1
  Left, // 2
  Right // 3
}

enum DirectionEnum {
  Up = 10, // 10
  Down, // 11
  Left = 20, // 20
  Right // 21
}

字符串枚举

若定义为字符串,其他枚举值必须赋予初始值。

ts
enum DirectionEnum {
  Up = 'UP',
  Down = 'DOWN',
  Left = 'LEFT',
  Righ = 'RIGHT'
}

枚举原理

ts
enum DirectionEnum {
  Up = 10, // 10
  Down, // 11
  Left = 20, // 20
  Right // 21
}

// => js
var DirectionEnum;
(function (DirectionEnum) {
  DirectionEnum[DirectionEnum["Up"] = 10] = "Up";
  DirectionEnum[DirectionEnum["Down"] = 11] = "Down";
  DirectionEnum[DirectionEnum["Left"] = 20] = "Left";
  DirectionEnum[DirectionEnum["Right"] = 21] = "Right";
})(DirectionEnum || (DirectionEnum = {}));
ts
enum DirectionEnum {
  Up = 'UP',
  Down = 'DOWN',
  Left = 'LEFT',
  Righ = 'RIGHT'
}

// => js
var DirectionEnum;
(function (DirectionEnum) {
  DirectionEnum["Up"] = "UP";
  DirectionEnum["Down"] = "DOWN";
  DirectionEnum["Left"] = "LEFT";
  DirectionEnum["Righ"] = "RIGHT";
})(DirectionEnum || (DirectionEnum = {}))

枚举值若不为数字,

常量枚举

编译后非常复杂,通过常量枚举可以提升性能f

ts
const enum DirectionEnum {
  Up = 10, // 10
  Down, // 11
  Left = 20, // 20
  Right // 21
}

基于 MIT 许可发布