我正在尝试学习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;
有人可以解释为什么编译会引发该错误吗?
(我跟踪了其他线程,发现此“没有重叠”错误,但无法理解此特定代码段问题的原因)
答案 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)
如果您重复条件枚举,则可能会发生这种情况。