比较TypeScript中的枚举值时出现“没有重叠”错误

时间:2019-10-16 20:18:02

标签: typescript

我正在尝试学习TypeScript,并且一直在跟踪在线教程示例以获取TypeScript中的枚举支持。对于以下代码段:

enum daysoftheweek{
    SUN, MON, TUE, WED, THU, FRI, SAT
}

let day:daysoftheweek ;

day = daysoftheweek.FRI; //line 7

if (day === daysoftheweek.MON){
    console.log("got to go to work early");
}else{
    console.log("I may go late");
}

...我在编译时遇到此错误,但我不明白为什么:

  

TS2367::此条件将始终返回“ false”   因为类型'daysoftheweek.FRI'和'daysoftheweek.MON'没有重叠。

如果我将第7行修改为该错误,则会出错: day = daysoftheweek.MON;

有人可以解释为什么编译会引发该错误吗?
(我跟踪了其他线程,发现此“没有重叠”错误,但无法理解此特定代码段问题的原因)

3 个答案:

答案 0 :(得分:3)

没有应用可能影响day变量值的逻辑-编译器可以清楚地看到它将始终为daysoftheweek.FRI。错误告诉您它永远不会等于daysoftheweek.MON,因此if语句没有任何用途。

答案 1 :(得分:1)

请注意,如果您有多个具有相同值的枚举,也会发生此错误。例如,如果您有Enum1.OTHER =“ other”和Enum2.OTHER =“ other”,并且尝试将Enum1类型的值与Enum1.OTHER进行比较,您会认为它可以正常工作。但是不,Typescript会感到困惑,并且不知道“其他”是用于Enum1还是Enum2。解决此问题的方法是始终像这样使用它:

let action:Enum1 = whatever;
if (action == (Enum1.OTHER as Enum1)) {
    // do something
} else if (action == (Enum1.SOMETHING_ELSE as Enum1)) {
    // do something else
}

对我进行一些随机猜测,以查找问题并消除此错误。

答案 2 :(得分:0)

如果您重复条件枚举,则可能会发生这种情况。