TypeScript开启noFallthroughCasesInSwitch后如何标记合法switch穿透
TypeScript 有意switch穿透标记方案
问题场景
已开启noFallthroughCasesInSwitch编译配置后,自定义的fallthrough注释无法被TS识别,仍然抛出7029错误。
可用解决方案
- 方案1:使用TS官方识别的标准穿透注释
将注释放在需要穿透的case代码块的最后一行,紧挨着下一个case之前,推荐用单行// fallthrough写法即可,TS会自动识别为合法的有意穿透,不会报错。你之前的注释写法(带s后缀、放在case行或代码块开头)都无法被编译器识别。
示例代码:
function getRandomInt(max: number) { return Math.floor(Math.random() * max); } switch(getRandomInt(3)) { case 1: console.log(1); // fallthrough case 2: console.log(2); break; }
- 方案2:局部忽略错误(兼容老版本TS)
如果用上述注释仍然报错,可在报错的case行上方添加单条错误忽略注释,明确告知编译器此处错误为有意忽略:
function getRandomInt(max: number) { return Math.floor(Math.random() * max); } switch(getRandomInt(3)) { // @ts-expect-error 此处为有意编写的switch穿透逻辑 case 1: console.log(1); case 2: console.log(2); break; }
注意:不推荐使用
// @ts-ignore,@ts-expect-error会明确标记你预期此处存在错误,如果后续代码调整导致该错误消失,TS会反过来提示你删除多余的忽略注释,更易维护。
- 方案3:代码重构(可选)
如果没有必须保留穿透的特殊需求,可以直接合并case逻辑避免穿透,从根源消除报错:
switch(getRandomInt(3)) { case 1: console.log(1); case 2: console.log(2); break; }
内容的提问来源于stack exchange,提问作者A-S
相关产品推荐
相关产品推荐

