Switch语句中Enum的TypeScript编译器错误

时间:2018-02-22 04:00:28

标签: typescript enums switch-statement

为什么TypeScript编译器(版本2.7.2)显示错误消息" 错误TS2678:键入' Enum1.b'不能与类型' Enum1.a' "对于以下代码序列?

const enum Enum1 {a, b};

let e1: Enum1 = Enum1.a;

for (let i = 0; i < 10; i++) {
   const newE1 = (i % 2 == 0) ? Enum1.a : Enum1.b;
   setE1(newE1);
   switch (e1) {
      case Enum1.a:
         console.log("a");
         break;
      case Enum1.b:
         console.log("b");
         break;
   }
}

function setE1 (newE1: Enum1) {
   e1 = newE1;
}

当我用switch(e1)替换switch(+e1)时,不会发生错误。

2 个答案:

答案 0 :(得分:1)

简化:

const enum Enum1 {a, b};
let e1: Enum1 = Enum1.a;

setE1(Enum1.b);
// Error === cannot be applied to Enum1.a and Enum1.b
if (e1 === Enum1.b) console.log('yup'); // But it is

function setE1(newE1: Enum1) {
   e1 = newE1;
}

似乎是推理引擎中的一个错误。您应该在此处报告:https://github.com/Microsoft/TypeScript/issues

答案 1 :(得分:0)

如果您在带有类型化参数的函数中使用switch表达式,则可以按预期工作。

示例:

const enum Enum1 {a, b};

function testSwitch(e1: Enum1) {
    switch (e1) {
        case Enum1.a:
            console.log("a");
            break;
        case Enum1.b:
            console.log("b");
            break;
    }
}

testSwitch(Enum1.a)

将编译?并输出a?

相关问题