2016-11-25 70 views
5

在下面的代码中,Typescript编译器表示属性'doit'在类型'never'上不存在。这可能是一个编译器错误?属性'x'在类型'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

是的,它似乎是一个bug:InstanceOf incorrectly narrow when two type extends same base class

但是,不管怎样,你在做什么?
如果你想foo不同的行为在Y情况又何尝不是在Y覆盖它:

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

如果doit只需要在Y情况下,它应该是在Y,如果它需要在这两个它能受到保护X

+0

由于传统原因需要破解,即Y的源代码无法更改。 – user2486738

相关问题