En TypeScript, se pueden extender (heredar) tipos tanto mediante interface extends como mediante type & type (tipos de intersección). Además, las interfaces pueden extender tipos y viceversa.
Interfaces utilizan la palabra clave extends para heredar propiedades:
interface Animal { name: string; } interface Bird extends Animal { wings: number; }
Tipos pueden ser combinados a través de &:
type Animal = { name: string }; type Bird = Animal & { wings: number };
Además, una interfaz puede extender otro tipo:
type Base = { id: number }; interface Derived extends Base { description: string; }
Particularidades:
¿Se puede extender un tipo (type) a través de una interfaz o viceversa? ¿Qué error comete la mayoría?
Muchos creen que solo se pueden extender interfaces a través de interfaces, pero en realidad una interfaz puede extender un tipo:
type Basic = { flag: boolean }; interface Extra extends Basic { name: string; }
Sin embargo, un tipo no puede extender otros tipos a través de extends — solo a través de la intersección de tipos (&).
Historia
Historia
Historia
El equipo pensaba que no se podía extender una interfaz con un tipo, y para ampliar la funcionalidad común reescribían todas las estructuras de type a interface, gastando mucho tiempo y esfuerzo — aunque solo se podría extender tipos existentes de manera no estándar.