ProgramaciónDesarrollador Fullstack

Hable sobre interfaces (interface) y alias de tipos (type alias) en TypeScript. ¿Cuáles son sus diferencias y en qué casos elegir uno u otro enfoque?

Supere entrevistas con el asistente de IA Hintsage

Respuesta.

Ambos mecanismos — interface y type alias — permiten describir estructuras de datos (objetos, funciones, tipos complejos).

  • Interface — declaración clásica de una interfaz. Permite extender interfaces, fusionarse (declaration merging), heredar fácilmente.
  • Type alias — crea un nuevo alias de tipo. Se puede combinar mediante unión / intersección, asignar a cualquier entidad: primitivas, funciones, tuplas, etc.

Diferencias:

  • Extensibilidad: interface es mejor para estructuras objetuales, admite la fusión declarativa.
  • Flexibilidad: type alias es universal, adecuado para todo: uniones (|) 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:

  • Para API públicas — usar interface.
  • Para uniones complejas y alias — usar type.

Pregunta engañosa.

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 }

Ejemplos de errores reales debido a la falta de conocimiento de los matices del tema.


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.