TypeScript 中的 noFallthroughCasesInSwitch
说明 noFallthroughCasesInSwitch 为什么会阻止 switch 的意外贯穿,以及它如何把遗漏 break/return/throw 的分支写法提前变成编译错误。
#tech / dev
#resource / typescript
#type / concept
#status / growing
[!info] related notes
- 所属 MOC: TypeScript MOC
- 配置入口: tsconfig 使用详解
- 并列概念: TypeScript 中的 noImplicitReturns, TypeScript 类型检查
TypeScript 中的 noFallthroughCasesInSwitch
一句话定义
noFallthroughCasesInSwitch 会对 switch 里的意外 case 贯穿报错。
核心机制 / 工作原理
官方文档直接说明:
- Report errors for fallthrough cases in switch statements
并明确了判定标准:
- 非空的 case 分支需要以
break、return或throw之类的显式终止结束
例如:
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 经常一起出现
两者都在强化:
- 分支结构是否完整
- 控制流是否明确
参考信息
- TSConfig
noFallthroughCasesInSwitch: https://www.typescriptlang.org/tsconfig/noFallthroughCasesInSwitch.html