TypeScript编译器不显示TypeError

时间:2014-11-17 08:00:38

标签: compiler-errors typescript

I',遇到TypeScript编译器问题。为什么以下代码段没有显示任何错误?

class A {

}

class B {
  myVar:string;
}

class Foo {
  bar(a:A){}

  doSomething(){
    this.bar(new B());
  }
}

由于 B 不是 A ,是否应该禁止带 B bar -call?

1 个答案:

答案 0 :(得分:5)

此处不应禁止* bar- *调用,因为TypeScript具有结构类型关系。因此,根据the specification,A和B不仅通过名称进行比较,而是通过枚举和比较其成员进行比较。如下。

  1. bar()调用要求其参数类型可分配给相应的参数类型。所以,"新B()"类型应该分配给" A" (规范部分4.12.1"过载决议")

  2. 如果我们比较" B"和" A"结构上根据规范第3.8.4节和#34;分配兼容性"中提出的算法,我们看到" B"可分配给" A"。

  3. 如果您想进一步尝试,只需添加一些属性" x"到A级。你会看到你的错误。