我爱编程

TypeScript学习-Type Inference

2017-07-01  本文已影响48人  指尖泛出的繁华

Basics

以下几种情况,TypeScript会发生类型推理。


Best common type

如果要从几个表达式里面推断类型,TypeScript会从这些表达式里面计算一个best common type用于最终的类型。

打个比方,如果一个数组。如下

let x = [0, 1, null];

TypeScript使用best common type algoithm维护一个candidate队列,每个成员的类型加入candidate队列,然后选出一个与其他candidate成员最兼容的类型。所以上面x的类型推断为number[] & Array<number>

如果几个表达式所代表的类型组成的candidate类型势均力敌,那么无法推断,所以需要自己明确指出类型。

let zoo: Animal[] = [new Rhino(), new Elephant(), new Snake()];

Contextual Type

当发生赋值函数的情况,TypeScript能使用Contextual Type,来推断在对应Contextual Type Position上的类型,如果如果函数表达式中参数不在对应的Contextual Type Position,且没有显式设置,那么想相应的参数类型就会为any,如下。

window.onmousedown = function(mouseEvent: any) {
// function(handler, ...) 所以mouseEvent无法推断
    console.log(mouseEvent.buton);  //<- Now, no error is given
};

以下几种情况会发生Contextual Type

function createZoo(): Animal[] {
    return [new Rhino(), new Elephant(), new Snake()];
}
上一篇下一篇

猜你喜欢

热点阅读