Wähle das richtige Konstrukt, um deine Objekttypen zu modellieren und zu kombinieren, ohne Code zu duplizieren.
Diese Lektion in Kodokon öffnenDu weißt bereits, wie du Objekttypen deklarierst. Die eigentliche Frage in einem Projekt lautet: type oder interface? Und wie kombinierst du bestehende Typen, ohne Code zu duplizieren? Beginnen wir mit dem häufigsten Fall: Entitäten modellieren, die sich ähneln.
interface User {
id: number;
name: string;
}
interface Admin extends User {
permissions: string[];
}
const admin: Admin = {
id: 1,
name: "Ada",
permissions: ["users:write"],
};extends schafft eine klare Beziehung: Ein Admin ist ein User mit zusätzlichen Rechten. Mit einem type-Alias erreichst du dasselbe Ergebnis über den Intersection-Operator &, der mehrere Formen zu einer einzigen verschmilzt. Das ist das perfekte Werkzeug für übergreifende Belange, etwa Zeitstempel, die auf allen deinen Entitäten vorkommen.
type Timestamps = {
createdAt: Date;
updatedAt: Date;
};
type Product = {
id: number;
label: string;
};
type StoredProduct = Product & Timestamps;Was solltest du also wählen? Zwei Unterschiede zählen wirklich. Erstens kann nur type einer Union wie 'active' | 'archived' einen Namen geben. Zweitens verschmelzen zwei interface-Deklarationen mit demselben Namen automatisch: praktisch, um die Typen einer Bibliothek zu erweitern, gefährlich, wenn es aus Versehen passiert.
type Status = "active" | "archived";
interface Config {
locale: string;
}
interface Config {
debug: boolean;
}
const config: Config = { locale: "fr", debug: true };