如果有Stackblitz: the following typescript switch block即使过滤器为 false,它也会执行第一种情况(如下面的日志语句所示):
public applyFilter(filter, completeTodos, incompleteTodos): Todo[] {
console.log("FILTER VALUE: ", filter);
console.log("IS THE FILTER TRUE?", filter == true);
switch (filter) {
case filter == true:
console.log("Returning complete TODOS");
return completeTodos;
break;
case filter == false:
console.log("Returning incomplete TODOS");
return incompleteTodos;
break;
default:
console.log("Returning the Default");
return completeTodos;
}
}
这是控制台记录的内容(可以在 stackblitz 链接中看到):
FILTER VALUE:
false
IS THE FILTER TRUE?
false
Returning complete TODOS
我有一种感觉,我错过了一些非常简单的东西,但同时这似乎是错误的......想法?
最佳答案
这不是编写 switch case 的方式。整个想法是打开动态值,然后让每个案例处理静态值。
switch (filter) {
case true:
console.log("Returning complete TODOS");
return completeTodos;
case false:
console.log("Returning incomplete TODOS");
return incompleteTodos;
default:
console.log("Returning the Default");
return completeTodos;
}
break
语句也是多余的,因为您在它们之前返回。如果您想在 switch block 之后继续执行,则只需 break
。
此外,您的默认情况有点没有实际意义,因为 bool 要么是 true 要么是 false,除非您计划在某些情况下传递 undefined
。
关于javascript - Typescript switch 语句执行错误情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52614513/