Schnittstellentypprüfung mit Typescript

Diese Frage ist das direkte Analogon zuKlassentypprüfung mit TypeScript

Ich muss zur Laufzeit herausfinden, ob eine Variable vom Typ eine Schnittstelle implementiert. Hier ist mein Code:

interface A{
    member:string;
}

var a:any={member:"foobar"};

if(a instanceof A) alert(a.member);

Wenn Sie diesen Code in den Typoskript-Bereich eingeben, wird die letzte Zeile als Fehler markiert: "Der Name A ist im aktuellen Bereich nicht vorhanden." Das stimmt aber nicht, der Name existiert im aktuellen Gültigkeitsbereich. Ich kann sogar die Variablendeklaration auf ändernvar a:A={member:"foobar"}; ohne Beschwerden des Herausgebers. Nach dem Surfen im Web und der Suche nach der anderen Frage zu SO habe ich die Schnittstelle in eine Klasse geändert, kann dann jedoch keine Objektliterale zum Erstellen von Instanzen verwenden.

Ich habe mich gefragt, wie der Typ A so verschwinden könnte, aber ein Blick auf das generierte Javascript erklärt das Problem:

var a = {
    member: "foobar"
};
if(a instanceof A) {
    alert(a.member);
}

Es gibt keine Darstellung von A als Schnittstelle, daher sind keine Laufzeit-Typprüfungen möglich.

Ich verstehe, dass Javascript als dynamische Sprache kein Konzept von Schnittstellen hat. Gibt es eine Möglichkeit, nach Schnittstellen zu suchen?

Die Autovervollständigung des Typoskriptspielplatzes zeigt, dass Typoskript sogar eine Methode bietetimplements. Wie kann ich es benutzen?

Antworten auf die Frage(9)

Ihre Antwort auf die Frage