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。
答案 0 :(得分:1)
TypeScript中的变量从初始化器推断其类型,而不是从赋值。类中的bar1
字段属于any
类型,因为它未初始化且没有类型注释。您可以对any
类型的变量执行任何操作。