【问题标题】:"have no overlap" error while comparing enum values in TypeScript比较 TypeScript 中的枚举值时出现“没有重叠”错误
【发布时间】:2020-09-09 07:23:16
【问题描述】:

我正在尝试学习 TypeScript,并且一直在关注有关 TypeScript 中枚举支持的在线教程示例。对于下面这个sn-p:

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;

有人能解释一下为什么编译会抛出这个错误吗?
(我在这个“没有重叠”错误上关注了其他线程,但无法理解这个特定 sn-p 问题的原因)

【问题讨论】:

    标签: typescript


    【解决方案1】:

    没有应用可能影响day 变量值的逻辑——编译器可以清楚地看到它始终是daysoftheweek.FRI。错误告诉你它永远不会等于daysoftheweek.MON,所以 if 语句没有任何意义。

    【讨论】:

    • 我现在明白了。我认为我不应该期望类似 Java 的相似性,因为这个 sn-p 对于 Java 是完全编译有效的。打字稿更聪明:)
    【解决方案2】:

    请注意,如果您有多个具有相同值的枚举,也会发生此错误。例如,如果您有 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
    }
    

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

    【讨论】:

      【解决方案3】:

      如果你重复 Enum 条件,就会发生这种情况。

      【讨论】:

        猜你喜欢
        • 2011-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-08
        • 1970-01-01
        • 2011-05-28
        • 1970-01-01
        • 2016-02-07
        相关资源
        最近更新 更多