cj-*_*307 2 javascript enums node.js typescript
我想知道 typescript 如何将枚举编译成 javascript 代码。所以我实现了以下示例:
enum Contagens {
UM,
DOIS,
TRES
}
Run Code Online (Sandbox Code Playgroud)
它被编译成这样:
"use strict";
var Contagens;
(function (Contagens) {
Contagens[Contagens["UM"] = 0] = "UM";
Contagens[Contagens["DOIS"] = 1] = "DOIS";
Contagens[Contagens["TRES"] = 2] = "TRES";
})(Contagens || (Contagens = {}));
Run Code Online (Sandbox Code Playgroud)
但是,我不明白它是如何工作的......有人可以向我解释这段代码吗?
变量var Contagens;
这将创建一个变量来保存对枚举的引用。
如果枚举已经存在,则使用参数Contagens || (Contagens = {})
enum;如果不存在,则将其设置为空对象。这允许扩展枚举:
enum Contagens {
UM,
DOIS,
TRES
}
enum Contagens {
CATRE = 4
}
Run Code Online (Sandbox Code Playgroud)
该函数function (Contagens) {
采用一个参数,Contagens
该参数是步骤 #2 中的值。在此函数中,它将在枚举对象上创建条目。它与外部变量具有相同的名称Contagens
,因此它会隐藏该变量。但它的值是相同的,所以这并不重要。
分配。
Contagens[Contagens["UM"] = 0] = "UM";
Run Code Online (Sandbox Code Playgroud)
赋值的结果就是被赋值的值。*Contagens["UM"] = 0
有两件事也是如此。它将键设置"UM"
为值0
,然后返回0
。
返回的结果0
将在第二个赋值中使用:
Contagens[0] = "UM";
Run Code Online (Sandbox Code Playgroud)
现在"UM"
房产已经转让0
,0
房产已转让给"UM"
。枚举现在看起来像这样:
{ UM: 0, "0": "UM" }
Run Code Online (Sandbox Code Playgroud)
这允许您通过名称查找枚举中的值,或从其值获取其名称。
Contagens.UM // 0
Contagens[0] // "UM"
Run Code Online (Sandbox Code Playgroud)
这很方便!
*声明变量时赋值的结果是undefined
,但赋值对象的属性或赋值给现有变量将返回赋值的值。JS 就是这么古怪。