Sobes.tech
Middle

¿Cuándo deberías usar tipos y cuándo interfaces en TypeScript?

sobes.tech AI

Respuesta de la IA

Los tipos (type) deben usarse para:

  • Uniones (unions) e intersecciones (intersections):
    type Status = "pending" | "completed" | "failed";
    type UserWithAddress = User & Address;
    
  • Tipos primitivos y literales:
    type ID = string | number;
    type Direction = "up" | "down" | "left" | "right";
    
  • Tuplas:
    type RgbColor = [number, number, number];
    
  • Creación de alias para tipos existentes:
    type StringOrNumber = string | number;
    
  • Tipos condicionales:
    type TypeOfProp<T, K extends keyof T> = T[K];
    

Las interfaces (interface) deben usarse para:

  • Describir la estructura de objetos:
    interface User {
      id: number;
      name: string;
      age?: number; // Propiedad opcional
    }
    
  • Implementación mediante clases (implements):
    interface Logger {
      log(message: string): void;
    }
    
    class ConsoleLogger implements Logger {
      log(message: string) {
        console.log(message);
      }
    }
    
  • Extensión de otras interfaces (extends):
    interface Person {
      name: string;
    }
    
    interface Employee extends Person {
      employeeId: number;
    }
    
  • Fusión declarativa (declaration merging): Esto permite ampliar una interfaz existente declarándola nuevamente. Con los tipos, esto no es posible.
    interface Box {
      width: number;
    }
    
    interface Box { // Esto añadirá la propiedad height a la interfaz Box
      height: number;
    }
    

Resumen comparativo:

Característica type interface
Tipos unión No
Tipos intersección No
Tipos primitivos/literales No
Tuplas No
Alias de tipos No
Tipos condicionales No
Descripción de objetos
Implementación con clases No
Extensión Sí (usando &) Sí (usando extends)
Fusión declarativa No

En general, para describir la estructura de objetos, es preferible usar interface, ya que se ajusta mejor al enfoque orientado a objetos y soporta la fusión declarativa. Para todo lo demás, especialmente para combinaciones y creación de nuevos tipos a partir de existentes, type es más flexible.