在使用有关Typescript的Lynda教程(https://www.lynda.com/Visual-Studio-tutorials/TypeScript-types-part-2/543000/565613-4.html#tab)时,我遇到了麻烦。该示例代码说明了switch语句如何在TypeScript中工作,但是似乎对教师而言正常的代码抛出类型“ x”无法与类型“ y”错误相比。这是代码:
enum temperature{
cold,
hot
}
let temp = temperature.cold;
switch (temp) {
case temperature.cold:
console.log("Brrr....");
break;
case temperature.hot:
console.log("Yikes...")
break;
}
我得到一个错误,并在下面case temperature.hot:
说:
Type 'temperature.hot' is not comparable to type 'temperature.cold'
是什么赋予了?
那是因为编译器已经知道这种情况temperature.hot
永远不会发生:给变量temp
赋予枚举文字类型temperature.cold
,该类型只能为其本身分配值(如果没有严格的null检查,则为null)。由于temperature.hot
这里不是兼容值,因此编译器将引发错误。
如果我们丢弃有关文字的信息(通过强制转换或从函数中获取值):
function how_cold(celsius: number): temperature {
return celsius > 40 ? temperature.hot : temperature.cold;
}
该代码将随后编译:
let temp = how_cold(35); // type is "temperature"
switch (temp) {
case temperature.cold:
console.log("Brrr....");
break;
case temperature.hot:
console.log("Yikes...")
break;
}
另外,+
在值之前加上前缀是可行的,因为它将值转换为数字,这也将扩大类型的范围,并使其与所有枚举变体以及其他数字兼容。
let temp = temperature.cold;
switch (+temp) {
case temperature.cold:
console.log("Brrr....");
break;
case temperature.hot:
console.log("Yikes...")
break;
case 5:
console.log("What??");
break;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句