TypeScript Enum

112 阅读1分钟

数字枚举

可以不设置初始值,如果不设置,第一项的值为0,后面自增。

enum Direction{
    up=1,
    down,
    left,
    right
}

编译为js是什么样的呢?

"use strict";
var Direction;
(function (Direction) {
    Direction[Direction["up"] = 1] = "up";
    Direction[Direction["down"] = 2] = "down";
    Direction[Direction["left"] = 3] = "left";
    Direction[Direction["right"] = 4] = "right";
})(Direction || (Direction = {}));

这段代码通过一个自执行函数,为对象Direction设置了8个属性

image.png

为什么有8个属性呢?这里着重解释下这句代码

Direction[Direction["up"] = 1] = "up";

这句代码会先执行 Direction["up"] = 1 ,Direction有了up属性,同时这个表达式返回值为1,那接下来就会执行 Direction[1] = "up",也就是这一句代码给Direction设置了2个属性。

那在我们使用时可以用Direction.up它的值为1,也可以用Direction[1]它的值为"up"。

字符串枚举

字符串枚举必须给每一项设置初始值,它没有值自增这一特新

enum Direction{
    up = "up",
    down = "down",
    left = "left",
    right = "right"
}