Skip to content
🥤typescript tutorial
On this page

TypeScript 类型推断

摘要:在这个教程中,你将学习 TypeScript 中的类型推断(type inference)。

类型推断描述了当你没有明确注解类型时,TypeScript 在哪里以及如何推断类型。

基本类型推断

当你声明一个变量时,你可以使用一个类型注解来明确指定它的类型。比如说:

然而, 如果你将 counter 变量初始化为一个数字,TypeScript 将推断计数器的类型为 number 。比如说:

它等同于以下声明:

同样地,当你给一个函数参数赋值时,TypeScript 会将参数的类型推断为默认值的类型。比如说:

在这个例子中,TypeScript 推断 max 参数的类型是 number

类似地,TypeScript 推断下面的 increment() 函数的返回类型为 number

它和下面效果一样:

最佳的通用类型算法

考虑下面的赋值:

为了推断 items 变量的类型,TypeScript 需要考虑数组中每个元素的类型。

它使用最佳通用类型算法(common type algorithm)来分析每个候选类型,并选择与所有其他候选类型兼容的类型。

在这种情况下,TypeScript 选择了数字数组类型( number[] )作为最佳通用类型。

如果你在 items 数组中添加一个字符串,TypeScript 将推断 items 的类型为 number string 的数组: (number | string)[]

当 TypeScript 无法找到最佳通用类型时,它会返回联合数组类型 。比如说:

在这个例子中,TypeScript 推断 arr 的类型为 (RegExp | Date)[]

上下文类型推断

TypeScript 使用变量的位置来推断它们的类型。这个机制被称为上下文类型推断(contextual typing) 。例如:

在这个例子中,TypeScript 知道 event 参数是 MouseEvent 的一个实例,因为是 click 事件。

然而,当你把 click 事件改为 scroll 事件时,TypeScript 会发出一个错误:

Error: