TypeScript 中的 noFallthroughCasesInSwitch

说明 noFallthroughCasesInSwitch 为什么会阻止 switch 的意外贯穿,以及它如何把遗漏 break/return/throw 的分支写法提前变成编译错误。

#tech / dev #resource / typescript #type / concept #status / growing

[!info] related notes

TypeScript 中的 noFallthroughCasesInSwitch

一句话定义

noFallthroughCasesInSwitch 会对 switch 里的意外 case 贯穿报错。

核心机制 / 工作原理

官方文档直接说明:

  • Report errors for fallthrough cases in switch statements

并明确了判定标准:

  • 非空的 case 分支需要以 breakreturnthrow 之类的显式终止结束

例如:

switch (a) {
  case 0:
    console.log("even");
  case 1:
    console.log("odd");
    break;
}

开启后,TypeScript 会直接指出:

  • case 0 发生了 fallthrough

最小例子 / 最小场景

{
  "compilerOptions": {
    "noFallthroughCasesInSwitch": true
  }
}

它最有价值的地方是:

  • 多分支状态机
  • reducer
  • 条件分支较密的业务逻辑

边界与易混淆点

它针对的是“意外贯穿”,不是所有连续 case 都非法

如果你的代码就是有意共享分支逻辑,通常需要把写法组织得更明确,而不是让一个非空 case 静默滑到下一个 case。

它更偏控制流质量,而不是类型语义

这个选项不改变类型推断本身,而是减少一类经典分支 bug。

它和 noImplicitReturns 经常一起出现

两者都在强化:

  • 分支结构是否完整
  • 控制流是否明确

参考信息

创建于 2026/5/15 更新于 2026/5/27