TypeScript中的隐式类型差异

时间:2014-03-25 21:33:22

标签: typescript

TypeScript是否应根据分配给它的内容隐式输入变量?我得到了这种奇怪的差异 - 如果我通过赋值隐式输入变量并调用非现有方法TS如果发生在类内部则不会抛出错误但如果在类之外发生则抛出错误:

class Bar {
    constructor() {
        //do nothing;
    }
}


class Foo {
    bar1;
    bar2: Bar;

    constructor() {
        //do nothing;
        this.bar1 = new Bar();
        this.bar1.asdasd();

        this.bar2 = new Bar();
        this.bar2.asdasd(); //error TS2094: The property 'asdasd' does not exist on value of type 'Bar'.
    }
}

var bar3 = new Bar();
bar3.asdasd(); //error TS2094: The property 'asdasd' does not exist on value of type 'Bar'.

var bar4 : Bar = new Bar();
bar4.asdasd(); //error TS2094: The property 'asdasd' does not exist on value of type 'Bar'.

看看bar1怎么不抛出错误?看看这个playground example

1 个答案:

答案 0 :(得分:1)

TypeScript中的变量从初始化器推断其类型,而不是从赋值。类中的bar1字段属于any类型,因为它未初始化且没有类型注释。您可以对any类型的变量执行任何操作。