TypeScript中enum枚举类型的实现原理?

新手上路,请多包涵

ts中的代码:

// 数字枚举
enum PostStatus {
  Draft = 0,
  baidu = 1,
  sougou = 2,
}

上述编译为js代码:

var PostStatus;
(function (PostStatus) {
    PostStatus[PostStatus["Draft"] = 0] = "Draft";
    PostStatus[PostStatus["baidu"] = 1] = "baidu";
    PostStatus[PostStatus["sougou"] = 2] = "sougou";
})(PostStatus || (PostStatus = {}));

将js代码放入浏览器执行,得到这样的结果:
image
上述的js代码是怎么运行出来PostStatus这样的对象的?

{0: "Draft", 1: "baidu", 2: "sougou", Draft: 0, baidu: 1, sougou: 2}

对上述js代码的执行顺序不是很明白,求解答,十分感谢。

阅读 5.7k
2 个回答
PostStatus[PostStatus["Draft"] = 0] = "Draft";

可以分解成

PostStatus["Draft"] = 0;   //{Draft:0}
PostStatus[PostStatus["Draft"]]="Draft"   //{Draft:0,0:"Draft"}

所以typescript的enum其实是定义了一个双向的映射关系
这样可以通过枚举值获取到枚举名称

var name=PostStatus[0];

通过枚举名称获取到枚举值

var value=PostStatus["Draft"];

原理就是赋值操作也是表达式,也有返回值

var a = 1; var b = 2;
var c = (a = a + b); // 也可以不要这个括号
var d = {
   [c=1]: c=2
};
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题