打字稿中枚举数的输出异常

时间:2017-07-07 05:16:19

标签: typescript enums

任何人都可以从下面的代码解释我得到的输出吗?

enum days {sun = 1,mon = 0,tues};

的console.log(天[1]); //返回tues //预期输出 - 周一 的console.log(天[0]); //返回mon //期望输出 - sun

另外,请解释一下如何在这种情况下打印太阳?这种情况令我感到困惑。请求您在执行代码并观察输出后才能提供有效的解释。

2 个答案:

答案 0 :(得分:2)

这个打字稿:

enum days { sun = 1, mon = 0, tues };

compiles对此javascript:

var days;
(function (days) {
    days[days["sun"] = 1] = "sun";
    days[days["mon"] = 0] = "mon";
    days[days["tues"] = 1] = "tues";
})(days || (days = {}));
;

第一个部分:days[days["sun"] = 1] = "sun";

首先评估days["sun"] = 1

  • 确保您能够致电days.sun并获得价值1
  • 返回键#34; sun"设置的值。 => 1.这意味着最初 days[1]将被设置为" sun"。

第二部分:days[days["mon"] = 0] = "mon";

  • 确保您能够拨打days.mon并获得价值0
  • 返回键#34; mon"设置的值。 => 0.因此days[0]将被设置为" mon"。

第三部分:days[days["tues"] = 1] = "tues";

评估days["tues"] = 1

  • 确保您能够致电days.tues并获得价值1
  • 还会返回键设置的值" tues" => 1

这意味着此时days[1]将被覆盖值" tues"

答案 1 :(得分:-1)

你构建枚举的方式很不寻常。 根据文档,未定义的枚举将自动为自己创建一个值+1到前一个值。

您当前的枚举结构将有两个值设置为1. Typescript / javascript似乎选择了具有所需值的最后一项。

您的代码:

enum days{
sun = 1,
mon = 0,
tues
}

VS(来自我的一个项目的类似枚举工作正常)

enum days{
Sun = 0,
Mon,
Tue,
Wed,
Thu,
Fri,
Sat
}

根据文件(https://www.typescriptlang.org/docs/handbook/enums.html

  

它没有初始化程序,前面的枚举成员是   不变。在这种情况下,当前枚举成员的值将是   前面枚举成员的值加一。一个例外   rule是枚举中的第一个元素。如果它没有初始化程序   它被赋值为0