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 vor 17 Tagen

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. Unsere Datenschutzbestimmungen können Sie hier nachlesen