关于 Enum 类型的编译结果疑问
leinad59 opened this issue · 1 comments
leinad59 commented
原文:
Enum 结构的特别之处在于,它既是一种类型,也是一个值。绝大多数 TypeScript 语法都是类型语法,编译后会全部去除,但是 Enum 结构是一个值,编译后会变成 JavaScript 对象,留在代码中。
// 编译前
enum Color {
Red, // 0
Green, // 1
Blue // 2
}
// 编译后
let Color = {
Red: 0,
Green: 1,
Blue: 2
};然而,这里的 Color 符合文末的“反向映射”中的内容:
数值 Enum 存在反向映射,即可以通过成员值获得成员名。
TypeScript playground 的编译结果符合反向映射中的结果:
"use strict";
var Color;
(function (Color) {
Color[Color["Red"] = 0] = "Red";
Color[Color["Green"] = 1] = "Green";
Color[Color["Blue"] = 2] = "Blue"; // 2
})(Color || (Color = {}));所以前面的“编译后”内容是否可以认为是不准确的?
ruanyf commented
前面的编译结果是一个简化版本,有利于读者理解。如果不考虑反向映射,就是这个结果。