TypeScript 中的 noImplicitReturns
说明 noImplicitReturns 为什么会检查函数所有代码路径是否都显式返回,以及它为什么常被当作和 strict 搭配的控制流质量开关。
#tech / dev
#resource / typescript
#type / concept
#status / growing
[!info] related notes
- 所属 MOC: TypeScript MOC
- 配置入口: tsconfig 使用详解
- 并列概念: TypeScript 中的 strict, TypeScript 类型检查, TypeScript 中的 strictNullChecks
TypeScript 中的 noImplicitReturns
一句话定义
noImplicitReturns 会检查一个函数的所有代码路径,确保它们都显式返回值。
核心机制 / 工作原理
官方文档的例子是:
function lookupHeadphonesManufacturer(color: "blue" | "black"): string {
if (color === "blue") {
return "beats";
} else {
"bose";
}
}
这里 else 分支没有真正 return,所以开启:
{
"compilerOptions": {
"noImplicitReturns": true
}
}
后,TypeScript 会报:
- Function lacks ending return statement and return type does not include ‘undefined’
最小例子 / 最小场景
它最适合强化:
- 分支完整性
- 控制流一致性
- 函数返回约定
边界与易混淆点
它常和 strict 一起使用,但不等于 strict family 本身
这个选项经常出现在高质量项目默认配置里,但它不是“strict 相关 = 必然 strict family”的简单同义词。
它更像:
- 与 strict 相邻的控制流质量检查
它特别适合有明确返回值契约的函数
当函数签名已经写得很清楚时,它能帮助你及时发现某个分支忘了 return。
它不能替代更细的空值建模
即使全路径都有返回,也不等于你的返回类型就天然正确;这仍然和:
strictNullChecks
等其他类型开关配合使用。
参考信息
- TSConfig
noImplicitReturns: https://www.typescriptlang.org/tsconfig/noImplicitReturns.html