在下面的代码中,Typescript编译器表示属性'doit'在'never'类型中不存在.这可能是编译器错误吗?
class X {
public foo(): void {
if (this instanceof Y) {
} else {
this.doit();
}
}
private doit(): void {
}
}
class Y extends X {
}
Run Code Online (Sandbox Code Playgroud)
我找到了以下解决方法:
const temp = (this instanceof Y);
if (temp) {
} else {
this.doit();
}
Run Code Online (Sandbox Code Playgroud)
编译器对此等效代码没有任何问题,这再次让我怀疑这里存在编译器错误.
是的,这似乎是一个错误:当两个类型扩展相同的基类时,InstanceOf 错误地缩小了范围。
但是,无论如何,你所做的事情有什么意义呢?
如果您想foo在以下实例中表现不同,Y那么为什么不覆盖它Y:
class Y extends X {
public foo(): void {
...
}
}
Run Code Online (Sandbox Code Playgroud)
如果doit仅在Y实例中需要它应该在 中Y,如果两者都需要它可以在 中受到保护X。
| 归档时间: |
|
| 查看次数: |
1916 次 |
| 最近记录: |