首页 > 解决方案 > 没有中断的 TypeScript 枚举 switch 语句

问题描述

如果我理解正确,以下签名的 switch 语句执行:

switch (key) {
    case value:

        break;
    default:

        break;
}

如下:

因为当我省略 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
    }
}

所以,我想我在这里误解了一些东西,但是搜索这个问题并没有产生任何结果。如果有人可以对此有所了解,我将不胜感激。

标签: typescriptenumsswitch-statement

解决方案


一条switch语句运行第一个匹配项中的所有代码。它在找到匹配项时不会检查其他情况。例如,如果您通过a它将记录1,23. 如果你通过b. 它将返回23。它将继续运行,并且仅省略匹配之前的代码。告诉您的breakswitch 语句它可以停在那里。它的工作原理类似于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
}

...

推荐阅读