为什么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)
时,不会发生错误。
答案 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
?