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

时间:2016-11-25 01:07:35

标签: typescript

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

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

1 个答案:

答案 0 :(得分:1)

是的,这似乎是一个错误:InstanceOf incorrectly narrow when two type extends same base class

但是,无论如何,你在做什么有什么意义? 如果您希望fooY的实例中表现不同,那么为什么不在Y中覆盖它:

class Y extends X {
    public foo(): void {
        ...
    }
}

如果只在doit个实例中需要Y,那么它应该在Y中,如果两者都需要它,则可以在X中保护。