TypeScript中的switch语句损坏

时间:2019-09-12 21:47:32

标签: javascript typescript

我在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");

here is a picture of the error, thank you

2 个答案:

答案 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语句中的静态值相结合。