Ambos mecanismos — interface y type alias — permiten describir estructuras de datos (objetos, funciones, tipos complejos).
Diferencias:
|) e intersecciones (&).Ejemplo:
interface Animal { name: string } interface Dog extends Animal { bark(): void } // type alias para unir tipos: type MyType = string | number type Cat = Animal & { purr(): void }
Recomendaciones:
interface.type.Pregunta: ¿Se puede agregar un nuevo campo a un tipo definido a través de type alias en otro archivo?
Respuesta:
No. Type alias no se puede extender declarativamente desde otro archivo, a diferencia de interface.
Ejemplo:
// main.ts type User = { name: string } // another.ts type User = { age: number } // Error: Identificador duplicado // interface: // main.ts interface User { name: string } // another.ts interface User { age: number } // Ok, User = { name: string, age: number }
Historia
En un gran proyecto se definieron estructuras de datos comunes a través de type alias. Cuando fue necesario agregar un campo a un tipo existente desde otro paquete, resultó que type alias no admite la fusión declarativa — hubo que reescribirlo como interface, lo que causó retrasos.
Historia
Uno de los desarrolladores describió funciones a través de interface y luego intentó agregar un tipo Unión (una cadena o una función) — resultó que interface no sirve para esto, y tuvo que cambiar todas las definiciones a type alias con intersección/unión.
Historia
Después de cambiar el tipo de interface a type alias, confundieron la sintaxis de extensión: intentaron usar extends, en lugar de combinar a través de &. El error se manifestó tarde y no se entendió de inmediato la razón.