Was ist der Unterschied zwischen diesen Anweisungen (Schnittstelle vs Typ)?
interface X {
a: number
b: string
}
type X = {
a: number
b: string
};
typescript
Wonea
quelle
quelle
Antworten:
Gemäß der TypeScript-Sprachspezifikation :
In der Spezifikation wird weiter erwähnt:
quelle
interface Point { x: number; } interface Point { y: number; }
extends or implements
ist nicht mehr der Fall. Typ kann erweitert und implementiert werden durch aclass
. Hier ist ein Beispiel typescriptlang.org/play/...Update 2019
Die aktuellen Antworten und die offizielle Dokumentation sind veraltet. Und für diejenigen, die neu in TypeScript sind, ist die verwendete Terminologie ohne Beispiele nicht klar. Nachfolgend finden Sie eine Liste der aktuellen Unterschiede.
1. Objekte / Funktionen
Beide können verwendet werden, um die Form eines Objekts oder eine Funktionssignatur zu beschreiben. Die Syntax ist jedoch unterschiedlich.
Schnittstelle
Geben Sie einen Alias ein
2. Andere Typen
Im Gegensatz zu einer Schnittstelle kann der Typalias auch für andere Typen wie Grundelemente, Vereinigungen und Tupel verwendet werden.
3. Verlängern
Beide können erweitert werden, aber auch hier unterscheidet sich die Syntax. Beachten Sie außerdem, dass sich ein Schnittstellen- und Typalias nicht gegenseitig ausschließen. Eine Schnittstelle kann einen Typalias erweitern und umgekehrt.
Schnittstelle erweitert Schnittstelle
Typalias erweitert Typalias
Die Schnittstelle erweitert den Typalias
Der Typ-Alias erweitert die Schnittstelle
4. Geräte
Eine Klasse kann eine Schnittstelle oder einen Typalias auf dieselbe Weise implementieren. Beachten Sie jedoch, dass eine Klasse und eine Schnittstelle als statische Blaupausen betrachtet werden. Daher können sie keinen Typalias implementieren / erweitern, der einen Vereinigungstyp benennt.
5. Zusammenführung der Erklärung
Im Gegensatz zu einem Typalias kann eine Schnittstelle mehrfach definiert werden und wird als eine einzige Schnittstelle behandelt (wobei Mitglieder aller Deklarationen zusammengeführt werden).
quelle
type
oderinterface
? Ich bin immer noch verwirrt, wann ich das eine oder andere verwenden soll.Ab TypeScript 3.2 (November 2018) gilt Folgendes:
quelle
type
mit bestimmten Einschränkungen definieren (und ab TypeScript 3.7 sind diese Einschränkungen ebenfalls weg). Schnittstellen können Typen erweitern. Klassen können Typen implementieren. Darüber hinaus ist die Darstellung von Daten als Screenshot einer Tabelle für Personen mit Sehbehinderung völlig unzugänglich.https://www.typescriptlang.org/docs/handbook/advanced-types.html
quelle
Beispiele mit Typen:
// eine Baumstruktur für ein Objekt erstellen. Mit der Schnittstelle können Sie nicht dasselbe tun, da keine Schnittmenge (&) vorhanden ist.
// Typ, um eine Variable so einzuschränken, dass nur wenige Werte zugewiesen werden. Schnittstellen haben keine Union (|)
// Dank der Typen können Sie dank eines bedingten Mechanismus den NonNullable-Typ deklarieren.
Beispiele mit Schnittstelle:
// Sie können die Schnittstelle für OOP verwenden und 'implementiert' verwenden, um das Objekt- / Klassenskelett zu definieren
// Sie können Schnittstellen mit anderen Schnittstellen erweitern
quelle
Zusätzlich zu den bereits bereitgestellten brillanten Antworten gibt es spürbare Unterschiede bei der Erweiterung von Typen gegenüber Schnittstellen. Ich bin kürzlich auf einige Fälle gestoßen, in denen eine Schnittstelle den Job nicht ausführen kann:
quelle
Die Dokumentation hat erklärt
Schnittstellen vs. Typ-Aliase
quelle