在typescript中读取'enum',我看到这段代码编译为javascript。
var Season = [];
Season[Season["Spring"] = 0] = "Spring";
Season[Season["Summer"] = 1] = "Summer";
Season[Season["Fall"] = 2] = "Fall";
Season[Season["Winter"] = 3] = "Winter";
console.log(Season.Spring); // 0
console.log(Season[0]); // Spring
并且,如果我在第一行将Season更改为{}空objext,这也有效,这是有道理的。 我不知道发生了什么事。 这是什么?
编辑:是的。这不是编译器生成的。编译器使用空对象。但是,如果我将其更改为空数组。它仍然有效。我的问题是为什么数组也很好。起初我的问题包括两个版本,但有人编辑了问题并删除了对象使用版本。
答案 0 :(得分:5)
这:
Season[Season["Spring"] = 0] = "Spring";
Season[Season["Summer"] = 1] = "Summer";
Season[Season["Fall"] = 2] = "Fall";
Season[Season["Winter"] = 3] = "Winter";`
在Season对象中创建八个属性:
Season["Spring"] = 0;
Season["Summer"] = 1;
Season["Fall"] = 2;
Season["Winter"] = 3;
Season[0] = "Spring";
Season[1] = "Summer";
Season[2] = "Fall";
Season[3] = "Winter";
在那之后可以要求:
答案 1 :(得分:3)
看起来有人正试图让Season成为双向地图。
换句话说,您可以按数字索引或字符串值查找项目。
var season1 = Season[1]; // season1 == 'Summer'
var summerIndex = Season['Summer']; // summerIndex == 1
答案 2 :(得分:0)
如果我在第一行将Season更改为{}空objext,这也有效,这是有道理的
我有一些docs about enums,但您的问题是原因:
Season = [];
而不是
Season = {};
实际上是以下TypeScript:
enum Season {
Spring,
Summer,
Fall,
Winter
}
var Season;
(function (Season) {
Season[Season["Spring"] = 0] = "Spring";
Season[Season["Summer"] = 1] = "Summer";
Season[Season["Fall"] = 2] = "Fall";
Season[Season["Winter"] = 3] = "Winter";
})(Season || (Season = {}));
正如您所见Season = {}
。所以它应该对你有意义。
不是您的问题,但如果您对Season[Season["Spring"] = 0] = "Spring";
that is covered here感到好奇。
答案 3 :(得分:0)
如果您将代码块中的第一个语句更改为Season
,以便Object.freeze
是一个数组而不是一个空对象,我将解答为什么它仍然有效的问题。数组也是对象,您可以在JavaScript中设置您喜欢的任何属性,甚至是数组(只要您不通过Season["Spring"] = 0
运行对象)。所以表达式Season
只是在Season["Spring"]
对象上设置名为“Spring”的属性,您可以使用Season.Spring
或import Vue from './vue';
import MultiLanguage from './vue-multilanguage';
访问该对象,就像在任何其他对象上一样