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

ええ、それはバグのようです:InstanceOf incorrectly narrow when two type extends same base class

しかし、関係なく、あなたがやっていることのポイントは何ですか?

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

をそしてdoitのみYの場合に必要とされている場合、それは両方それができるに必要になった場合には、Yにする必要があります:
あなたはfooその後Yのインスタンスに異なる動作をする場合、なぜないYでそれをオーバーライドしますXで保護されます。

+0

レガシーの理由で必要なハックです。つまり、Yのソースコードを変更することはできません。 – user2486738

関連する問題