【问题标题】:How typescript implements enumerations?typescript 如何实现枚举?
【发布时间】:2023-04-03 01:22:02
【问题描述】:

我想知道 typescript 如何将枚举编译成 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 = {}));

但是,我不明白它是如何工作的……有人可以向我解释这段代码吗?

【问题讨论】:

    标签: javascript node.js typescript enums


    【解决方案1】:
    1. 变量var Contagens; 这将创建一个变量来保存对枚举的引用。

    2. 参数Contagens || (Contagens = {})枚举如果已经存在则使用,如果不存在则设置为空对象。这允许扩展枚举:

    enum Contagens {
        UM,
        DOIS,
        TRES
    }
    
    enum Contagens {
        CATRE = 4
    }
    
    1. 函数function (Contagens) { 接受一个参数Contagens,它是来自步骤#2 的值。在此函数中,它将在枚举对象上创建条目。它与外部变量Contagens 同名,因此它会隐藏该变量。但它是相同的值,所以这并不重要。

    2. 任务。

    Contagens[Contagens["UM"] = 0] = "UM";
    

    赋值的结果是被赋值的值。* 所以Contagens["UM"] = 0 做了两件事。它将键 "UM" 设置为值 0,并返回 0

    返回的0 然后用于第二个赋值:

    Contagens[0] = "UM";
    

    现在"UM" 属性已分配给00 属性已分配给"UM"。枚举现在看起来像这样:

    { UM: 0, "0": "UM" }
    

    这允许您在枚举中通过其名称查找值,或从其值中获取其名称。

    Contagens.UM // 0
    Contagens[0] // "UM"
    

    这很方便!


    * delcaring 变量时赋值的结果是undefined,但赋值对象的属性或赋值给现有变量将返回赋值的值。 JS 就是这么古怪。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-03
      • 2016-09-03
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 2010-09-09
      相关资源
      最近更新 更多