← Volver al Inicio
Desarrollo5 min

Type vs Interface en TypeScript: Cuándo y Cómo Usar Cada Uno

C
Camilo Pinzon
28 de marzo de 2025
Type vs Interface en TypeScript: Cuándo y Cómo Usar Cada Uno

TypeScript proporciona dos formas principales para definir estructuras de objetos: interface y type . Aunque pueden parecer intercambiables al principio, existen diferencias clave que afectan su uso. En este post, exploraremos esas diferencias y cuándo usar cada una, junto con escenarios específicos donde una es más beneficiosa que la otra.


Diferencias Entre Interface y Type


  1. Extensibilidad:
  2. interface se puede extender usando extends .
  3. type no se puede extender, pero se puede combinar con & (intersección).
  4. Fusión de Declaraciones:
  5. interface permite la fusión automática cuando se declara varias veces.
  6. type no permite fusión; cada definición es independiente.
  7. Uso en Objetos:
  8. interface es la mejor opción para definir estructuras de objetos, especialmente si se usarán en clases.
  9. type también puede definir objetos, pero es más flexible para otros usos.
  10. Soporte para Primitivos y Uniones:
  11. interface solo se usa para objetos y clases.
  12. type puede definir alias de tipos primitivos y uniones, lo que lo hace más versátil.


Cuándo Usar Interface


Usa interface cuando defines la estructura de objetos, especialmente si el objeto podría necesitar ser extendido más adelante o implementado en una clase.

interface Animal {
name: string;
makeSound(): void;
}

class Dog implements Animal {
name: string;
constructor(name: string) {
this.name = name;
}
makeSound() {
console.log("¡Guau!");
}
}

const myDog = new Dog("Buddy");
myDog.makeSound(); // ¡Guau!


¿Por qué?


  1. Las interfaces funcionan bien con clases y programación orientada a objetos.
  2. Admiten la fusión de declaraciones, permitiendo una mejor extensibilidad.


Cuándo Usar Type


Usa type cuando defines tipos más complejos, incluyendo uniones, primitivos, intersecciones o firmas de funciones.

type Status = "success" | "error" | "loading";

type ApiResponse = {
status: Status;
data?: string;
};

const response: ApiResponse = {
status: "success",
data: "Datos obtenidos con éxito"
};


¿Por qué?


  1. type es ideal para definir tipos de unión, permitiendo una mayor flexibilidad.
  2. Puede representar tipos primitivos y firmas de funciones de manera más efectiva.


Conclusión


  1. Usa interface cuando defines estructuras de objetos que podrían necesitar extensión o implementación en una clase.
  2. Usa type cuando defines tipos de unión, alias de tipos primitivos o composiciones complejas.
  3. Si tienes dudas, prefiere interface para estructuras de objetos, ya que ofrecen mejor legibilidad y extensibilidad.

Tanto interface como type son características poderosas en TypeScript. Comprender sus diferencias te ayudará a escribir código más limpio y mantenible