TypeScript编译器不显示TypeError

Mik*_*e G 2 compiler-errors typescript

我有一个TypeScript编译器的问题.为什么以下代码段没有显示任何错误?

class A {

}

class B {
  myVar:string;
}

class Foo {
  bar(a:A){}

  doSomething(){
    this.bar(new B());
  }
}
Run Code Online (Sandbox Code Playgroud)

由于B不是A,不应该禁止带有B条形码

小智 5

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

  1. bar()调用要求其参数类型可分配给相应的参数类型.因此,"new B()"类型应该可以分配给"A"(规范部分4.12.1"过载分辨率")

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

如果你想进一步试验,只需在A类中添加一些属性"x".你会看到你的错误.