Interfaces, type aliases y 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:
interfacepara objetos que representan contratos clarostypepara 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.