TypeScript 中的 noImplicitReturns

说明 noImplicitReturns 为什么会检查函数所有代码路径是否都显式返回,以及它为什么常被当作和 strict 搭配的控制流质量开关。

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

[!info] related notes

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

等其他类型开关配合使用。

参考信息

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