我在TypeScript中的switch语句遇到问题
在多个代码编辑器上尝试过,我试图使用switch(true),但是由于某种原因,代码在switch语句中失败了。
const todoList: string[] | null = [];
function pushItemToTodoList(item: string) {
//COMPILES!!
if (todoList !== undefined && todoList !== null && todoList.length) {
if (todoList.length >= 5) {
console.log("LIST IS FULL!");
}
}
//DOESN'T COPMILE!!
switch (true) {
case todoList !== undefined && todoList !== null && todoList.length:
if (todoList.length >= 5) { //todoList is null???
console.log("LIST IS FULL!");
}
break;
}
}
pushItemToTodoList("clean house");
答案 0 :(得分:0)
那不是switch语句的工作原理。
如果您要写:
switch (true) {
case todoList:
if (todoList.length >= 5) { //todoList is null???
console.log("LIST IS FULL!");
}
break;
}
它会起作用,因为您在switch语句中正在检查大小写是否正确。
Switch语句采用原始值,例如布尔值,字符串,数字等。
您尝试使用switch语句的方式更加复杂,并且只能与if语句一起使用。
答案 1 :(得分:0)
switch语句本身不会失败。 simpy不能容忍带有变量的case语句。也没有条件运算符,只有静态值。 在编译时,switch语句将建立case语句中所有静态值及其跳转位置的索引。 您不能在case语句中使用变量,因为在编译时,这些变量不应该被计算甚至不存在。 Switch-Case语句具有出色的性能,因为带有静态值的索引和跳转位置已预先编译。 但是,有一种方法可以解决此特定问题,可以将布尔逻辑与switch语句中的代数以及case语句中的静态值相结合。