В принятом ответе на вопрос с названием "Составить перечисление в 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";
Вместо