Hor*_*kin 12 switch-statement typescript
对不起,我知道这是超级基本但似乎无法找到答案.在Typescript上做一个Lynda教程(https://www.lynda.com/Visual-Studio-tutorials/TypeScript-types-part-2/543000/565613-4.html#tab),我遇到了麻烦.示例代码说明了switch语句在TS中是如何工作的,但是对于教师而言似乎正常工作的代码抛出了类型'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;
}
Run Code Online (Sandbox Code Playgroud)
我得到一个错误并在'case temperature.hot'下曲线说'Type'temperature'hot'与'temperature.cold'类型无法比较.是什么赋予了?
E_n*_*ate 13
这是因为编译器已经知道这种情况temperature.hot永远不会发生:变量temp被赋予枚举文字类型temperature.cold,只能为该值本身赋值(如果没有严格的空值检查,则为null).由于temperature.hot此处不是兼容值,编译器会抛出错误.
如果我们丢弃有关文字的信息(通过从函数中转换或检索值):
function how_cold(celsius: number): temperature {
return celsius > 40 ? temperature.hot : temperature.cold;
}
Run Code Online (Sandbox Code Playgroud)
然后代码将编译:
let temp = how_cold(35); // type is "temperature"
switch (temp) {
case temperature.cold:
console.log("Brrr....");
break;
case temperature.hot:
console.log("Yikes...")
break;
}
Run Code Online (Sandbox Code Playgroud)
或者,+在值之前工作是因为它将值转换为数字,这也将扩大类型的范围并使其与所有枚举变体以及其他数字兼容.
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;
}
Run Code Online (Sandbox Code Playgroud)
另一个可能的原因可能是如果您检查 enum 变量 is notnull但这也会触发 if enumValis 0。这仅在枚举具有默认数值时才成立(因此第一项获得 的值0)
if (!!enumVal) {
switch (enumVal) {
case EnumClass.First // the if clause automatically excludes the first item
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4845 次 |
| 最近记录: |