2016-11-25 3 views
5

Im folgenden Code sagt der Typescript-Compiler, dass die Eigenschaft 'doit' beim Typ 'nie' nicht existiert. Könnte das ein Compiler Bug sein?Eigenschaft 'x' existiert nicht für den Typ 'nie'

class X { 
    public foo(): void { 
     if (this instanceof Y) { 
     } else { 
      this.doit(); 
     } 
    } 

    private doit(): void { 
    } 
} 

class Y extends X { 
} 

fand ich die folgende Abhilfe:

const temp = (this instanceof Y); 
if (temp) { 
} else { 
    this.doit(); 
} 

Der Compiler nicht mit diesem Ersatz Code irgendwelche Probleme hat, was wiederum führt mich dort zu vermuten, dass hier ein Compiler Fehler ist.

Antwort

1

Ja, es scheint ein Fehler zu sein: InstanceOf incorrectly narrow when two type extends same base class.

Aber egal, was ist der Sinn dessen, was Sie tun?
Wenn Sie foo wollen sich anders verhalten in Fällen von Y dann außer Kraft setzen, warum es nicht in Y:

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

Und wenn doit nur in Y Instanzen benötigt wird, sollte es in Y sein, wenn es in benötigt beide es kann in X geschützt sein.

+0

Es ist ein Hack aus Legacy-Gründen erforderlich, d. H. Der Quellcode von Y kann nicht geändert werden. – user2486738

Verwandte Themen