Javascript Typescript开关语句执行错误的大小写?

Javascript Typescript开关语句执行错误的大小写?,javascript,angular,typescript,Javascript,Angular,Typescript,如果有,则执行第一种情况,即使筛选器为false(如下所示为日志语句): 这是控制台记录的内容(可以在stackblitz链接中看到): 我有一种感觉,我错过了一些非常简单的东西,但同时这似乎是错误的。。。想法?这不是你写开关盒的方式。整个想法是打开一个动态值,然后让每个案例处理一个静态值 switch (filter) { case true: console.log("Returning complete TODOS"); return completeTodos;

如果有,则执行第一种情况,即使筛选器为false(如下所示为日志语句):

这是控制台记录的内容(可以在stackblitz链接中看到):


我有一种感觉,我错过了一些非常简单的东西,但同时这似乎是错误的。。。想法?

这不是你写开关盒的方式。整个想法是打开一个动态值,然后让每个案例处理一个静态值

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
语句也是多余的,因为您在它们前面返回。如果要在开关块之后继续执行,则只需
break


此外,您的默认情况也有点无意义,因为bool要么为真,要么为假,除非您计划在某些情况下传递
未定义的

开关的思想是使用
开关(someValue)
中的值,并在每个情况下检查它,但您正在手动执行每个情况检查

如果希望保持这种状态,请在
开关(true)

const filter=false;
开关(真){
案例过滤器==真:
日志(“返回完整的TODO”);
打破
案例过滤器==假:
log(“返回不完整的TODO”);
打破
违约:
log(“返回默认值”);
}
开关盒的工作原理:

这就是它的工作原理:

开关表达式计算一次。 将表达式的值与每种情况的值进行比较。 如果存在匹配项,则执行关联的代码块

您的案例filter==true正在返回false

按如下方式更改代码:

public applyFilter(filter, completeTodos, incompleteTodos): Todo[] {
    console.log("FILTER VALUE: ", filter);
    console.log("IS THE FILTER TRUE?", filter == true);
    switch (filter) {
      case true:
        console.log("Returning complete TODOS");
        return completeTodos;
        break;
      case false:
        console.log("Returning incomplete TODOS");
        return incompleteTodos;
        break;
      default:
        console.log("Returning the Default");
    return completeTodos;
    }
  }

尝试
case-true:
case-false:
filter
为false,因此它将转到第一个
案例
,该案例的计算结果为
false
,即
filter==true
@DavidAnthonyAcosta我支持你。“boolean的switch语句”在其他情况下被称为“if语句”
break
是不需要的。是的,我也会删除break。只是从问题中复制了代码。事实上-我在更复杂的设置上遇到了问题,所以我试图将其归结到最低限度。。。真正的用例将使用一个枚举并检查过滤器是否是一个枚举值。@Ole然后使用bog标准方式切换枚举
开关(someVar)
,然后使用
案例值\u ONE
案例值\u TWO
案例值\u TWO
等。
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;
}
public applyFilter(filter, completeTodos, incompleteTodos): Todo[] {
    console.log("FILTER VALUE: ", filter);
    console.log("IS THE FILTER TRUE?", filter == true);
    switch (filter) {
      case true:
        console.log("Returning complete TODOS");
        return completeTodos;
        break;
      case false:
        console.log("Returning incomplete TODOS");
        return incompleteTodos;
        break;
      default:
        console.log("Returning the Default");
    return completeTodos;
    }
  }