我想知道打字稿如何將列舉編譯成 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 = {}));
但是,我不明白它是如何作業的......有人可以向我解釋這段代碼嗎?
uj5u.com熱心網友回復:
變數
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,然后回傳0。
0然后在第二個任務中使用回傳的值:
Contagens[0] = "UM";
現在該"UM"屬性已分配,0并且該0屬性已分配給"UM"。列舉現在看起來像這樣:
{ UM: 0, "0": "UM" }
這允許您通過名稱查找列舉中的值,或從其值中獲取名稱。
Contagens.UM // 0
Contagens[0] // "UM"
哪個好用!
*宣告變數時賦值的結果是undefined,但賦值物件的屬性或賦值給現有變數將回傳賦值的值。JS 就是這樣的古怪。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/338029.html
標籤:javascript 节点.js 打字稿 枚举
