美文网首页我爱编程
TypeScript学习-Type Inference

TypeScript学习-Type Inference

作者: 指尖泛出的繁华 | 来源:发表于2017-07-01 10:42 被阅读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

    • 函数调用中的语句
    • 等号右侧赋值
    • 类型断言type assertions
    • 对象或者数组字面量的成员
    • 返回语句
    function createZoo(): Animal[] {
        return [new Rhino(), new Elephant(), new Snake()];
    }
    

    相关文章

      网友评论

        本文标题:TypeScript学习-Type Inference

        本文链接:https://www.haomeiwen.com/subject/lqpwcxtx.html