Interfaces, type aliases y enums

Aprende a modelar contratos reutilizables con interfaces y types, y entiende cuándo merece la pena usar enums.

Cuando el código crece, repetir objetos inline deja de ser práctico. Necesitas nombres, contratos reutilizables y estructuras fáciles de leer.


Interface

interface Usuario {
  id: number;
  nombre: string;
  email?: string;
}

Las interfaces son muy buenas para describir la forma de objetos.

const usuario: Usuario = {
  id: 1,
  nombre: 'Ana',
};

Extender interfaces

interface Usuario {
  id: number;
  nombre: string;
}

interface Admin extends Usuario {
  permisos: string[];
}

Esto hace muy cómodo construir jerarquías simples de datos.


Type alias

type ID = number | string;

type Producto = {
  id: ID;
  nombre: string;
  precio: number;
};

type es más flexible para unions, intersecciones y composiciones.


Entonces, ¿interface o type?

Regla práctica bastante razonable:

  • interface para objetos que representan contratos claros
  • type para unions, alias y combinaciones

En muchos proyectos modernos verás ambos.


Intersections

type Persona = {
  nombre: string;
};

type Empleado = Persona & {
  empresa: string;
};

La intersección combina tipos.


Enums

enum EstadoPedido {
  Pendiente,
  Enviado,
  Entregado,
}

También puedes dar valores explícitos:

enum Rol {
  Admin = 'ADMIN',
  User = 'USER',
}

Cuándo evitar enums

En frontend moderno muchas veces se prefiere esto:

type Rol = 'admin' | 'user';

Suele ser más ligero y fácil de integrar con APIs o componentes.

Los enum no están mal, pero conviene usarlos con criterio.


Idea final

Lo importante no es memorizar todas las diferencias, sino modelar bien el dominio:

  • qué datos existen
  • cuáles son obligatorios
  • cuáles son opcionales
  • qué estados son válidos

En la siguiente lección entramos en dos conceptos muy potentes: genéricos y narrowing.