Elige la construcción adecuada para modelar y componer tus tipos de objeto sin duplicar código.
Abrir esta lección en KodokonYa sabes declarar tipos de objeto. La verdadera cuestión en un proyecto es elegir entre type e interface, y luego componer tipos existentes sin duplicar código. Empecemos con el escenario más habitual: modelar entidades que se parecen entre sí.
interface User {
id: number;
name: string;
}
interface Admin extends User {
permissions: string[];
}
const admin: Admin = {
id: 1,
name: "Ada",
permissions: ["users:write"],
};extends crea una relación clara: un Admin es un User con poderes adicionales. Con un alias type, obtienes el mismo resultado mediante el operador de intersección &, que fusiona varias formas en una sola. Es la herramienta perfecta para preocupaciones transversales, como las marcas de tiempo presentes en todas tus entidades.
type Timestamps = {
createdAt: Date;
updatedAt: Date;
};
type Product = {
id: number;
label: string;
};
type StoredProduct = Product & Timestamps;Entonces, ¿cuál elegir? Dos diferencias importan de verdad. Primera, solo type puede nombrar una unión como 'active' | 'archived'. Segunda, dos declaraciones de interface que comparten el mismo nombre se fusionan automáticamente: práctico para ampliar los tipos de una biblioteca, peligroso cuando ocurre por accidente.
type Status = "active" | "archived";
interface Config {
locale: string;
}
interface Config {
debug: boolean;
}
const config: Config = { locale: "fr", debug: true };