← [ BACK_TO_NOTES ]

TypeScript 类型推断与类型标注

解释 TypeScript 如何从值和控制流推断类型,以及何时应在参数、返回值和公共边界显式标注。

#concept #evergreen #dev #typescript

[!info] related notes

TypeScript 类型推断与类型标注

一句话定义

类型推断是编译器根据初始值、调用关系和控制流计算类型;类型标注是开发者显式声明一个边界应接受或返回什么。

默认规则

局部实现优先让编译器推断:

const retries = 3;                  // number
const channels = ['run', 'tool'];   // string[]
const active = channels.includes('run'); // boolean

公共边界显式标注意图:

function parseSequence(raw: string): number {
  return Number.parseInt(raw, 10);
}

参数无法从函数体外推断,通常需要标注。返回值经常可以推断,但导出函数、递归函数和安全关键边界适合显式标注,以防实现变化悄悄改变契约。

上下文类型

回调参数常由使用位置提供类型:

const values = ['a', 'b'];
values.map((value) => value.toUpperCase());

这里不需要写 (value: string)。重复标注不会更安全,反而增加噪声。

字面量拓宽

let status = 'running';   // string,因为之后可以重新赋值
const phase = 'running';  // "running"

对象属性默认仍可能拓宽;需要保留字面量时参考 as const、satisfies 与类型断言。

决策规则

  • 局部变量:优先推断。
  • 函数参数:通常标注。
  • 导出 API:标注输入,重要时标注返回值。
  • 外部数据:先视为 unknown,运行时校验后再获得业务类型。
  • 不要为了“让红线消失”写 any 或宽泛断言。

常见误解

  • 标注不是运行时转换:const n = value as number 不会把字符串变成数字。
  • 类型越多不等于越安全;重复和过宽的标注会掩盖真实关系。
  • 推断不是猜测,它依据确定的类型规则和上下文。
创建于 2026/7/29 更新于 2026/9/16
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
关闭浮层 / 取消命令;输入框内清空文本