Was ist der Unterschied zwischen diesen Anweisungen (Schnittstelle vs. Typ)?Typoskript: Schnittstellen vs. Typen
interface X {
a: number
b: string
}
type X = {
a: number
b: string
};
Was ist der Unterschied zwischen diesen Anweisungen (Schnittstelle vs. Typ)?Typoskript: Schnittstellen vs. Typen
interface X {
a: number
b: string
}
type X = {
a: number
b: string
};
Gemäß den TypeScript Language Specification:
Im Gegensatz zu einer Interface-Deklaration, die immer einen benannte Objekttyp führt, kann eine Art Alias Erklärung einen Namen für jede Art von Typ, einschließlich primitiver, Vereinigung einzuführen, und Kreuzungstypen.
Die Spezifikation geht weiter zu erwähnen:
Interface-Typen viele Ähnlichkeiten haben Aliase für den Objekttyp Literale zu geben, aber da Interface-Typen mehr Funktionen bieten sie im allgemeinen bevorzugt Aliase zu geben. Zum Beispiel kann die Schnittstelle Typ
interface Point { x: number; y: number; }
könnte als Typ alias
type Point = { x: number; y: number; };
jedoch geschrieben werden, dabei bedeutet die folgenden Fähigkeiten verloren gehen:
- Eine Schnittstelle kann in benannt werden eine Klausel extends oder implements, aber ein Typalias für ein Objekttypliteral kann nicht.
- Eine Schnittstelle kann mehrere zusammengeführte Deklarationen enthalten, ein Typalias für ein Objekttypliteral kann dies jedoch nicht.
https://www.typescriptlang.org/docs/handbook/advanced-types.html
Ein Unterschied besteht darin, dass Schnittstellen einen neuen Namen erstellen, die überall verwendet wird. Typ-Aliase erstellen keinen neuen Namen. So wird beispielsweise bei Fehlermeldungen der Alias-Name nicht verwendet.
Was bedeutet "mehrere zusammengeführte Deklarationen" im zweiten Unterschied? – jrahhali
@jrahhali Ich denke, das * augmentierte * Szenario in [diesem SO-Thread] (http://stackoverflow.com/questions/36782896/in-typescript-what-ist-the-difference-winter-type-and-interface) antwortet Ihre Frage – superjos
@jrahhali Wenn Sie Schnittstelle zweimal definieren, führt Typoskript sie in eins zusammen. –