TypeScript Interfaces: von der Syntax bis interface vs type

TypeScript Interfaces

TypeScript Interface: Syntax, extends, Merging, vs type | We.Inc

Baue ein Interface Feld für Feld, sieh den passenden Type Alias und lerne optionale und readonly Member, extends, Declaration Merging und wann ein Type Alias besser passt.

Ein Interface benennt die Form eines Objekts: welche Eigenschaften es hat und welchen Typ jede davon trägt. Markiere eine Eigenschaft mit ? als optional und mit readonly als unveränderlich, baue mit extends auf einer anderen Form auf und öffne denselben Namen erneut, um weitere Member hinzuzufügen. Interfaces hinterlassen im kompilierten JavaScript keine Spur; sie leiten nur den Type Checker.

Interface-Syntax auf einen Blick

Füge im Generator unten Felder hinzu, setze Häkchen bei optional oder readonly und kopiere das Interface oder den gleichwertigen Type Alias. Die Abschnitte darunter behandeln Erweitern, Merging und die wenigen Fälle, in denen die Wahl zwischen interface und type wirklich zählt.

Häufige Fragen

Sollte ich interface oder type verwenden?

Für Objektformen funktioniert beides, und das Handbuch nennt es größtenteils persönliche Vorliebe und empfiehlt interface, bis du ein Feature brauchst, das nur type hat. Nutze type für Unions, Tuples, primitive Typen sowie Mapped und Conditional Types; nutze interface, wenn du Declaration Merging willst.

Was ist Declaration Merging?

Wenn du ein Interface mit einem bereits existierenden Namen deklarierst, werden ihm Member hinzugefügt, statt dass ein Fehler entsteht. Libraries nutzen das, damit du ihre Typen erweitern kannst, zum Beispiel um Window eine Eigenschaft hinzuzufügen. Ein Type Alias mit wiederholtem Namen ist ein Fehler.

Was passiert, wenn zwei gemergte Interfaces einer Eigenschaft unterschiedliche Typen geben?

Der Compiler meldet einen Fehler. Bei einer Intersection zweier Typen wird der Konflikt nicht an der Deklaration gemeldet; die Eigenschaft wird zu never, was erst später auffällt und schwerer nachzuverfolgen ist.

Kann ein Interface eine Funktion oder ein Array beschreiben?

Ja. Eine Call Signature wie (value: string): boolean beschreibt eine Funktion, und eine Index Signature wie [index: number]: string beschreibt ein Array-ähnliches Objekt. In einfachen Fällen liest sich ein Type Alias wie type Check = (v: string) => boolean klarer.

Existieren Interfaces zur Laufzeit?

Nein. Sie werden zu nichts kompiliert, du kannst also weder instanceof mit einem Interface verwenden noch seine Keys auflisten. Prüfe Werte mit einem Guard zur Laufzeit und annotiere dessen Rückgabetyp mit dem Interface.

extends im Vergleich zu Intersections

Optional, readonly und Index Signatures

Merging, um globale Typen und Library-Typen zu erweitern

interface vs Type Alias

Was jede Deklaration kann

Muster, die du oft schreiben wirst

Ein und mehrere Interfaces erweitern

Admin bekommt jeden Member von User plus eigene; Card kombiniert zwei unabhängige Formen.

Declaration Merging bei Window

In einer .d.ts-Datei abgelegt, besteht window.appVersion überall die Typprüfung.

Index Signature und Call Signature

Scores akzeptiert jeden String-Key; Validator beschreibt einen aufrufbaren Wert.

Interface-Generator

Name des Interfaces

Extends (optional)

Name von Eigenschaft {n}

Typ von Eigenschaft {n}

Optional

Readonly

Eigenschaft {n} entfernen

Eigenschaft hinzufügen

Als Interface

Als Type Alias

Interface kopieren

Type kopieren

Namen müssen mit einem Buchstaben, $ oder _ beginnen und dürfen nur Buchstaben, Ziffern, $ oder _ enthalten.

Kostenlos starten · Keine Kreditkarte nötig

Verwandt: Ratgeber

Produkt

Für wen

Funktionen

Ressourcen

Unternehmen

Sitemap