首页 > 解决方案 > 为什么 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,但前提是第一个参数Fruitundefined,它可能是 ( 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";

反而?

标签: javascripttypescriptenumscompilation

解决方案


表达式的Fruit["APPLE"] = 0计算结果为0或键分配的值。这意味着除了分配

Fruit["APPLE"] = 0

我们也在做这个任务

Fruit[0] = "APPLE"

这使得您既可以通过其数字值获取枚举的字符串名称,也可以通过其字符串名称获取数字值。


推荐阅读