Typescript枚举分配编译器中断更改
以下代码用于在TypeScript 2.0中正常工作:Typescript枚举分配编译器中断更改,typescript,Typescript,以下代码用于在TypeScript 2.0中正常工作: function enumDemo() { enum temperature{ cold, hot }; let temp = temperature.cold; switch (temp) { case temperature.cold: console.log("Brrr..."); break; case temperatu
function enumDemo() {
enum temperature{
cold,
hot
};
let temp = temperature.cold;
switch (temp) {
case temperature.cold:
console.log("Brrr...");
break;
case temperature.hot:
console.log("yikes!");
break;
}
}
enumDemo();
但是,它在tsc 2.3.4编译器版本中产生以下错误:
Type 'temperature.hot' is not comparable to type 'temperature.
TypeScript 2.0和2.3之间发生了哪些变化?编辑
这是每个版本的突破性更改列表,链接到我认为您正在寻找的更改。总之:
对于常量声明和只读属性,默认情况下不会推断字符串、数字、布尔值和枚举文字类型。这意味着您的变量/属性的类型比以前更窄。这可能表现在使用比较运算符,如===和!==
const DEBUG = true; // Now has type `true`, previously had type `boolean`
if (DEBUG === false) { /// Error: operator '===' can not be applied to 'true' and 'false'
...
}
所以别忘了声明类型,毕竟它是typescript。如果您将temp更改为temp:number,如下所示:
function enumDemo() {
enum temperature{
cold,
hot
};
let temp: number = temperature.cold;
switch (temp) {
case temperature.cold:
console.log("Brrr...");
break;
case temperature.hot:
console.log("yikes!");
break;
}
}
它应该很好用。发生的情况是编译器试图分配枚举类型,而不是枚举所代表的数字
另一种方法是使用静态成员而不是枚举创建类
export class temperature {
public static cold: number = 0;
public static hot: number = 1;
}
此代码在TypeScript 2.0中正常工作。问题是“TypeScript 2.0和2.3之间发生了什么变化?”它不应该是
let temp:temperature=temperature.cold代码>?@torazaburo创建了相同的编译错误。你们可能会认为它会很好,我认为它看起来和感觉都会比那个种数字要好,但它似乎并没有那个样起作用。我只是在VS代码中调出它,它将temp类型显示为“temperature.cold”,尽管类型定义是针对枚举的,而不是值(让temp:temperature=temperature.cold)