【发布时间】:2019-09-25 01:38:36
【问题描述】:
在accepted answer 的题为"Compile an enum in TypeScript" 的问题中,以下TypeScript:
enum Fruit {APPLE, ORANGE};
显示编译成这个 JavaScript:
var Fruit;
(function (Fruit) {
Fruit[Fruit["APPLE"] = 0] = "APPLE";
Fruit[Fruit["ORANGE"] = 1] = "ORANGE";
})(Fruit || (Fruit = {}));
在 line 3 和 line 4 上,对象属性分配被用作对象键:
Fruit[Fruit["APPLE"] = 0] = "APPLE";
Fruit[Fruit["ORANGE"] = 1] = "ORANGE";
在line 5 上,变量赋值被用作函数参数:
})(Fruit || (Fruit = {}));
据我了解,Fruit = {} 被括在括号中,因此它不是命名参数。
相反,它被评估并作为第一个参数传递给 IIFE,但前提是第一个 Fruit 是 undefined,它可能是 (line 1: var Fruit;),因为 TypeScript 不允许重复定义。
这对我来说没有意义,为什么 TypeScript 使用对象属性赋值作为对象键和变量赋值作为函数参数?
将enum 编译成这样不是更有意义吗:
var Fruit = Fruit || {};
Fruit.APPLE = Fruit[0] = "APPLE";
Fruit.ORANGE = Fruit[1] = "ORANGE";
或者这个:
var Fruit = {};
Fruit.APPLE = Fruit[0] = "APPLE";
Fruit.ORANGE = Fruit[1] = "ORANGE";
相反?
【问题讨论】:
标签: javascript typescript enums compilation