Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript枚举分配编译器中断更改_Typescript - Fatal编程技术网

Typescript枚举分配编译器中断更改

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

以下代码用于在TypeScript 2.0中正常工作:

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)