TypeScript 是如何实现枚举的?
How typescript implements enumerations?
我想知道打字稿如何将枚举编译成 javascript 代码。所以我实现了下面的例子:
enum Contagens {
UM,
DOIS,
TRES
}
编译成这样:
"use strict";
var Contagens;
(function (Contagens) {
Contagens[Contagens["UM"] = 0] = "UM";
Contagens[Contagens["DOIS"] = 1] = "DOIS";
Contagens[Contagens["TRES"] = 2] = "TRES";
})(Contagens || (Contagens = {}));
但是,我不明白它是如何工作的...有人可以向我解释这段代码吗?
变量 var Contagens;
这将创建将保存对枚举的引用的变量。
参数 Contagens || (Contagens = {})
如果枚举已经存在,则使用枚举,如果不存在,将设置为空对象。这允许扩展枚举:
enum Contagens {
UM,
DOIS,
TRES
}
enum Contagens {
CATRE = 4
}
函数 function (Contagens) {
接受一个参数 Contagens
,它是步骤 #2 的值。在此函数中,它将在枚举对象上创建条目。它与外部变量 Contagens
同名,因此它隐藏了该变量。但它是相同的值,所以这无关紧要。
作业。
Contagens[Contagens["UM"] = 0] = "UM";
赋值的结果就是赋值。* 所以 Contagens["UM"] = 0
做了两件事。它将键 "UM"
设置为值 0
,并且 returns 0
.
然后在第二个作业中使用 returned 0
:
Contagens[0] = "UM";
现在 "UM"
属性 已分配给 0
,0
属性 已分配给 "UM"
。枚举现在看起来像这样:
{ UM: 0, "0": "UM" }
这允许您通过名称在枚举中查找值,或从值中获取名称。
Contagens.UM // 0
Contagens[0] // "UM"
哪个好用!
* delcaring一个变量时赋值的结果是undefined
,但是赋值一个对象的属性或者赋值给一个已经存在的变量都会return 赋值。 JS就是那样古怪。
我想知道打字稿如何将枚举编译成 javascript 代码。所以我实现了下面的例子:
enum Contagens {
UM,
DOIS,
TRES
}
编译成这样:
"use strict";
var Contagens;
(function (Contagens) {
Contagens[Contagens["UM"] = 0] = "UM";
Contagens[Contagens["DOIS"] = 1] = "DOIS";
Contagens[Contagens["TRES"] = 2] = "TRES";
})(Contagens || (Contagens = {}));
但是,我不明白它是如何工作的...有人可以向我解释这段代码吗?
变量
var Contagens;
这将创建将保存对枚举的引用的变量。参数
Contagens || (Contagens = {})
如果枚举已经存在,则使用枚举,如果不存在,将设置为空对象。这允许扩展枚举:
enum Contagens {
UM,
DOIS,
TRES
}
enum Contagens {
CATRE = 4
}
函数
function (Contagens) {
接受一个参数Contagens
,它是步骤 #2 的值。在此函数中,它将在枚举对象上创建条目。它与外部变量Contagens
同名,因此它隐藏了该变量。但它是相同的值,所以这无关紧要。作业。
Contagens[Contagens["UM"] = 0] = "UM";
赋值的结果就是赋值。* 所以 Contagens["UM"] = 0
做了两件事。它将键 "UM"
设置为值 0
,并且 returns 0
.
然后在第二个作业中使用 returned 0
:
Contagens[0] = "UM";
现在 "UM"
属性 已分配给 0
,0
属性 已分配给 "UM"
。枚举现在看起来像这样:
{ UM: 0, "0": "UM" }
这允许您通过名称在枚举中查找值,或从值中获取名称。
Contagens.UM // 0
Contagens[0] // "UM"
哪个好用!
* delcaring一个变量时赋值的结果是undefined
,但是赋值一个对象的属性或者赋值给一个已经存在的变量都会return 赋值。 JS就是那样古怪。