javascript - 为什么 TypeScript 使用对象属性赋值作为对象键和变量赋值作为函数参数?
问题描述
在标题为“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 = {}));
Online 3
并且line 4
对象属性分配被用作对象键:
Fruit[Fruit["APPLE"] = 0] = "APPLE";
Fruit[Fruit["ORANGE"] = 1] = "ORANGE";
并且在line 5
变量赋值上被用作函数参数:
})(Fruit || (Fruit = {}));
据我了解, theFruit = {}
被括在括号中,因此它不是命名参数。
相反,它被评估并作为第一个参数传递给 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";
反而?
解决方案
表达式的Fruit["APPLE"] = 0
计算结果为0
或键分配的值。这意味着除了分配
Fruit["APPLE"] = 0
我们也在做这个任务
Fruit[0] = "APPLE"
这使得您既可以通过其数字值获取枚举的字符串名称,也可以通过其字符串名称获取数字值。
推荐阅读
- amazon-swf - 在 AWS SWF 中运行并行活动
- python - IndentationError: 期望一个缩进的块 dataset=list()
- java - 为什么我在 Eclipse Photon 中使用以下代码收到错误:“编辑器不包含主要类型”?
- android - Gradle 混合版本 28.0.0-beta01 和 26.1.0
- jquery - 如何检查数组是否包含具有相同文本的字符串?
- python - pip install ecos 出现“需要 Microsoft Visual C++ 14.0”的错误。
- javascript - 如何禁用加载css样式表url
- angular - Angular 6 - 在 Rxjs Observable 中使用通道
- jquery - 添加jquery的时间
- reactjs - AnyArray.map() 不是函数