为什么这段代码可以在打印脚本中运行?指定的类型是Child
,但它也允许传递任何超类(Parent
)...反之亦然(用子类替换父类).
class Parent {
constructor(private foo: string) {}
bar() {
return this.foo;
}
}
class Child extends Parent {
bar() {
return 'baz';
}
}
function doSomething(item: Child) {}
doSomething(new Parent('')); // No type error here...
有没有什么办法可以限制这一点,从而引发类型错误?
EDIT:简化示例
EDIT 2:用示例内容填充课程