在下面的代码中,Typescript编译器表示属性'doit'在'never'类型中不存在。这可能是编译器错误吗?
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();
}
编译器对此等效代码没有任何问题,这再次让我怀疑这里存在编译器错误。
答案 0 :(得分:1)
是的,这似乎是一个错误:InstanceOf incorrectly narrow when two type extends same base class。
但是,无论如何,你在做什么有什么意义?
如果您希望foo
在Y
的实例中表现不同,那么为什么不在Y
中覆盖它:
class Y extends X {
public foo(): void {
...
}
}
如果只在doit
个实例中需要Y
,那么它应该在Y
中,如果两者都需要它,则可以在X
中保护。