2016-11-25 68 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

相關問題