}枚举变量;
enum xxx { ... }声明关键字为枚举类型的方式如下:
// 声明d为枚举类型Direction let d: Direction;类型可以分成:
enum Direction { Up, // 值默认为 0 Down, // 值默认为 1 Left, // 值默认为 2 Right // 值默认为 3 } console.log(Direction.Up === 0); // true console.log(Direction.Down === 1); // true console.log(Direction.Left === 2); // true console.log(Direction.Right === 3); // true如果我们将第一个值进行赋值后,后面的值也会根据前一个值进行累加1:
enum Direction { Up = 10, Down, Left, Right } console.log(Direction.Up, Direction.Down, Direction.Left, Direction.Right); // 10 11 12 13字符串枚举
enum Direction { Up = 'Up', Down = 'Down', Left = 'Left', Right = 'Right' } console.log(Direction['Right'], Direction.Up); // Right Up如果设定了一个变量为字符串之后,后续的字段也需要赋值字符串,否则报错:
enum Direction { Up = 'UP', Down, // error TS1061: Enum member must have initializer Left, // error TS1061: Enum member must have initializer Right // error TS1061: Enum member must have initializer }异构枚举
enum BooleanLikeHeterogeneousEnum { No = 0, Yes = "YES", }通常情况下我们很少会使用异构枚举
enum Direction { Up, Down, Left, Right }通过编译后,javascript如下:
var Direction; (function (Direction) { Direction[Direction["Up"] = 0] = "Up"; Direction[Direction["Down"] = 1] = "Down"; Direction[Direction["Left"] = 2] = "Left"; Direction[Direction["Right"] = 3] = "Right"; })(Direction || (Direction = {}));上述代码可以看到, Direction[Direction["Up"] = 0] = "Up"可以分成
Direction["Up"] = 0 Direction[0] = "Up"所以定义枚举类型后,可以通过正反映射拿到对应的值,如下:
enum Direction { Up, Down, Left, Right } console.log(Direction.Up === 0); // true console.log(Direction[0]); // Up并且多处定义的枚举是可以进行合并操作,如下:
enum Direction { Up = 'Up', Down = 'Down', Left = 'Left', Right = 'Right' } enum Direction { Center = 1 }编译后,js代码如下:
var Direction; (function (Direction) { Direction["Up"] = "Up"; Direction["Down"] = "Down"; Direction["Left"] = "Left"; Direction["Right"] = "Right"; })(Direction || (Direction = {})); (function (Direction) { Direction[Direction["Center"] = 1] = "Center"; })(Direction || (Direction = {}));可以看到,Direction对象属性回叠加
enum Days {Sun, Mon, Tue, Wed, Thu, Fri, Sat}; console.log(Days["Sun"] === 0); // true console.log(Days["Mon"] === 1); // true console.log(Days["Tue"] === 2); // true console.log(Days["Sat"] === 6); // true包括后端日常返回0、1 等等状态的时候,我们都可以通过枚举去定义,这样可以提高代码的可读性,便于后续的维护