Choisissez la bonne construction pour modéliser et composer vos types d'objets sans dupliquer de code.
Ouvrir cette leçon dans KodokonVous savez déjà déclarer des types d'objets. La vraie question en projet, c'est de choisir entre type et interface, puis de composer des types existants sans dupliquer de code. Commençons par le terrain le plus courant : modéliser des entités qui se ressemblent.
interface User {
id: number;
name: string;
}
interface Admin extends User {
permissions: string[];
}
const admin: Admin = {
id: 1,
name: "Ada",
permissions: ["users:write"],
};extends crée une relation claire : un Admin est un User enrichi. Avec un alias type, on obtient le même résultat grâce à l'intersection &, qui fusionne plusieurs formes en une seule. C'est l'outil idéal pour les préoccupations transversales, comme des horodatages présents sur toutes vos entités.
type Timestamps = {
createdAt: Date;
updatedAt: Date;
};
type Product = {
id: number;
label: string;
};
type StoredProduct = Product & Timestamps;Alors, lequel choisir ? Deux différences comptent vraiment. Premièrement, seul type peut nommer une union comme 'active' | 'archived'. Deuxièmement, deux déclarations d'interface portant le même nom fusionnent automatiquement : pratique pour enrichir les types d'une bibliothèque, dangereux si c'est involontaire.
type Status = "active" | "archived";
interface Config {
locale: string;
}
interface Config {
debug: boolean;
}
const config: Config = { locale: "fr", debug: true };