没有中断的 TypeScript 枚举 switch 语句

TypeScript enum switch statement without break

如果我没理解错的话,下面签名的switch语句执行:

switch (key) {
    case value:

        break;
    default:

        break;
}

如下:

因为 TypeScript 在我省略 break 时不会报错,所以我假设 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,它将记录 123。如果你通过了b。它将 return 23。它会继续进行,只会省略匹配之前的代码。 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
}

...