Interfaces mit instanceof in Typescript prüfen

Sep 26 (23:33)

Warum ist es in TypeScript nicht möglich mit instanceof zu prüfen, ob ein Objekt ein bestimmtes Interface implementiert:

interface FooBar {
    ...
}

const test: FooBar = { ... };

if (test instanceof FooBar) {
    // ... Kompilierungsfehler ?!
}

Dieses Beispiel ist nicht kompilierbar: "'FooBar' only refers to a type, but is being used as a value here."

Mit Klassen funktioniert es dagegen:

class FooBar {
    // ...
}

const b = new FooBar;
console.log(b instanceof FooBar); // true
Alle Kommentare
matthias Okt 6 (10:53)

Interfaces existieren nur in TypeScript, nicht aber in JavaScript, dh. alle Interface-Definitionen werden bei der Kompilierung entfernt und instanceof macht hier keinen Sinn.

Es gibt einen Workaround mit "Type Guards": Im Prinzip ist das eine zusätzliche Property im Interface welche als Diskriminator für die verschiedenen Typen funktioniert, zum Beispiel:

type FooBar = 'foo' | 'bar';

interface Foo {
    type: FooBar;
}

interface Bar {
    type: FooBar;
}

const fooBar: Foo | Bar = getFooOderBar();

console.log(fooBar.type === 'foo');
0 0 0
Noch keine Stimmen abgegeben
Durch die Nutzung dieser Website erklären Sie sich mit der Verwendung von Cookies einverstanden. Außerdem werden teilweise auch Cookies von Diensten Dritter gesetzt. Genauere Informationen finden Sie in unserer Datenschutzerklärung sowie im Impressum.