在下面的代码中,Typescript编译器说类型'never'不存在属性'doit'。这可能是编译器错误吗?
class X {
public foo(): void {
if (this instanceof Y) {
} else {
this.doit();
}
}
private doit(): void {
}
}
class Y extends X {
}
我发现以下解决方法:
const temp = (this instanceof Y);
if (temp) {
} else {
this.doit();
}
编译器与此等效代码没有任何问题,这再次使我怀疑这里存在编译器错误。
最佳答案
是的,这似乎是一个错误:InstanceOf incorrectly narrow when two type extends same base class。
但是,无论如何,您在做什么的重点是什么?
如果您希望foo
在Y
实例中的行为有所不同,那么为什么不在Y
中覆盖它:
class Y extends X {
public foo(): void {
...
}
}
并且,如果仅在
doit
实例中需要Y
,则应在Y
中使用,如果两者都需要,则可以在X
中对其进行保护。