← [ BACK_TO_NOTES ]

TypeScript 中的 useUnknownInCatchVariables

说明 useUnknownInCatchVariables 为什么把 catch 变量默认从 any 变成 unknown,以及它如何推动更明确的错误收窄。

#dev #typescript #concept #growing

[!info] related notes

TypeScript 中的 useUnknownInCatchVariables

一句话定义

useUnknownInCatchVariables 会把 catch (err) 里的错误变量默认从 any 改成 unknown。

核心机制 / 工作原理

官方文档说明,TypeScript 4.0 开始已经支持手写:

catch (err: unknown)

而这个选项的作用,就是让你不必每次手写 : unknown。

例如:

{
  "compilerOptions": {
    "useUnknownInCatchVariables": true
  }
}

之后:

try {
  // ...
} catch (err) {
  if (err instanceof Error) {
    console.log(err.message);
  }
}

就会要求你先做收窄,再访问 message 之类的属性。

最小例子 / 最小场景

它最核心的价值是推动这件事:

  • 不预设任何被抛出的东西一定是 Error

因为 JavaScript 里真的可能抛出:

  • 字符串
  • 对象
  • 任意值

边界与易混淆点

它不是“让 catch 更麻烦”,而是让错误模型更真实

官方文档强调,这会让错误处理代码更完整,因为你不能预先保证 thrown value 一定是 Error 的子类。

它经常和 strict 一起出现

TypeScript 4.4 release notes 明确说明:

  • 这个选项在 strict family 下会自动开启

所以很多项目是在升级严格模式后才第一次碰到它。

需要时仍可在单个 catch 里显式退回 any

例如:

catch (err: any) {
  console.log(err.message);
}

这是一种局部 opt-out。

参考信息

创建于 2026/5/15 更新于 2026/7/15
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本