typescript - 没有中断的 TypeScript 枚举 switch 语句
问题描述
如果我理解正确,以下签名的 switch 语句执行:
switch (key) {
case value:
break;
default:
break;
}
如下:
- 如果 case 值匹配键
- 执行里面的代码
- 如果发现返回或中断
- 出口开关
- 否则评估下一个案例
- 否则评估下一个案例
因为当我省略 break 时 TypeScript 不会抱怨,所以我假设 switch 语句的工作方式类似于 if 语句。如果条件为真,就会执行 if 语句中的代码。
但是,如果我省略了中断,下面的示例代码将打印出所有 3 种情况,即使这些情况并非都是正确的。
enum SomeEnum {
a = 'a',
b = 'b',
c = 'c',
}
doSomething(SomeEnum.a)
function doSomething(s: SomeEnum) {
switch (s) {
case SomeEnum.a:
console.log(1)
break
case SomeEnum.b:
console.log(2)
break
case SomeEnum.c:
console.log(3)
break
default:
break
}
}
所以,我想我在这里误解了一些东西,但是搜索这个问题并没有产生任何结果。如果有人可以对此有所了解,我将不胜感激。
解决方案
一条switch
语句运行第一个匹配项中的所有代码。它在找到匹配项时不会检查其他情况。例如,如果您通过a
它将记录1
,2
和3
. 如果你通过b
. 它将返回2
和3
。它将继续运行,并且仅省略匹配之前的代码。告诉您的break
switch 语句它可以停在那里。它的工作原理类似于return
.
它不是真的像if-statement
它更像是:
if (SomeEnum.a) {
... run this code and all other code after it.
}
if (SomeEnum.b) {
... run this code and all other code after it
}
...
推荐阅读
- java - 在java中的文本文件中添加重复值
- php - Laravel:多对多关系中的错误
- c - 以相反的顺序打印链表:程序不输出任何东西
- apache-kafka - Kafka Streams 本地状态存储大小增加
- sql-server - 如何从具有与该表中的日期不完全匹配的特定日期的表中获取信息
- javascript - Cytoscape 复合布局从上到下问题
- bluetooth-lowenergy - BLE-RSSI 完全噪声信号
- loopbackjs - 使用 mysql 数据库进行环回查询的默认数据库超时是多少?
- c# - 将路由属性与任意字符串组合
- php - 如何在php中计算月份截止日期