Beide beschreiben die Form von Daten und sind oft austauschbar, aber sie haben unterschiedliche Möglichkeiten.
interface User { name: string; age: number; }
type User2 = { name: string; age: number; };
Beide beschreiben die Form von Daten und sind oft austauschbar, aber sie haben unterschiedliche Möglichkeiten.
interface User { name: string; age: number; }
type User2 = { name: string; age: number; };
type ID = string | number; // unions
type Pair = [number, number]; // tuples
type Name = User["name"]; // indexed/mapped/conditional types
type Nullable<T> = T | null; // wrap any type
type ist ein allgemeines alias für jeden Typ — Primitive, Unions, Tuples, Mapped Types. interface beschreibt nur die Form von Objekten/Funktionen.
interface kann, das type nicht kanninterface Box { width: number; }
interface Box { height: number; } // declaration merging — both merge into one
// Box now has width AND height
Interfaces unterstützen declaration merging (mehrere Deklarationen werden kombiniert) und sind die idiomatische Methode, um zu erweitern/zu ergänzen, einschließlich der Ergänzung von Third-Party-Bibliothekstypen.
interface Admin extends User { role: string; } // interface
type Admin2 = User & { role: string }; // type uses intersection
Eine verbreitete Konvention: Verwende interface für Objektformen und öffentliche APIs (bessere Fehlermeldungen, erweiterbar, zusammenführbar) und type wenn du Unions, Tuples oder andere Typoperationen benötigst. Wähle einen als Standard für Konsistenz — viele Teams bevorzugen interface für Objekte als Standard und greifen auf type nur zurück, wenn dessen zusätzliche Kraft benötigt wird.