文章转载自:https://github.com/zhongsp

介绍

这节介绍 TypeScript 里的类型推论。即,类型是在哪里如何被推断的。

基础

TypeScript 里,在有些没有明确指出类型的地方,类型推论会帮助提供类型。如下面的例子:

var x = 3;  // x 的类型被推断为 number

这种推断发生在初始化变量和成员、设置默认参数值和决定函数返回值时。

最佳通用类型

当需要从几个表达式中推断类型时候,会使用这些表达式的类型来推断出一个最合适的通用类型:

var x = [0, 1, null];  // 推断为 (number | null)[]

由于最终的通用类型取自候选类型,有些时候候选类型共享相同的通用类型,但是却没有一个类型能做为所有候选类型的类型:

var zoo = [new Rhino(), new Elephant(), new Snake()];
// 想要 Animal[],但没有 Animal 类型的对象,需要明确指定:
var zoo: Animal[] = [new Rhino(), new Elephant(), new Snake()];

如果没有找到最佳通用类型的话,类型推论的结果是空对象类型 {}

上下文类型

TypeScript 类型推论也可能按照相反的方向进行,这被叫做”按上下文归类”:

window.onmousedown = function(mouseEvent) {
    console.log(mouseEvent.buton);  // Error: 'buton' 不存在
};

TypeScript 类型检查器使用 Window.onmousedown 函数的类型来推断右边函数表达式的类型,因此能推断出 mouseEvent 参数的类型。

如果上下文类型表达式包含了明确的类型信息,上下文的类型被忽略:

window.onmousedown = function(mouseEvent: any) {
    console.log(mouseEvent.buton);  // 不报错,因为明确指定了 any
};

上下文归类会在很多情况下使用到,通常包含函数的参数、赋值表达式的右边、类型断言、对象成员和数组字面量和返回值语句。


<
Previous Post
转载:《TypeScript 中文入门教程》 13、类型兼容性
>
Next Post
转载:《TypeScript 中文入门教程》 14、输入 .d.ts 文件