属性'x'在'never'类型上不存在

use*_*738 5 typescript

在下面的代码中,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)

编译器对此等效代码没有任何问题,这再次让我怀疑这里存在编译器错误.

Nit*_*mer 1

是的,这似乎是一个错误:当两个类型扩展相同的基类时,InstanceOf 错误地缩小了范围

但是,无论如何,你所做的事情有什么意义呢?
如果您想foo在以下实例中表现不同,Y那么为什么不覆盖它Y

class Y extends X {
    public foo(): void {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

如果doit仅在Y实例中需要它应该在 中Y,如果两者都需要它可以在 中受到保护X