Lección 75 — Enums
🧠 Concepto
Section titled “🧠 Concepto”Los enums (enumeraciones) permiten definir un conjunto de constantes con nombre. Son útiles para representar opciones fijas como estados, direcciones, tipos de usuario, etc.
Enum numérico (por defecto)
Section titled “Enum numérico (por defecto)”enum Direccion { Norte, // 0 Sur, // 1 Este, // 2 Oeste // 3}
let direccion: Direccion = Direccion.Norte;console.log(direccion); // → 0El primer miembro empieza en 0 y los siguientes se incrementan automáticamente.
Enum con valor inicial
Section titled “Enum con valor inicial”enum StatusCode { Success = 200, NotFound = 404, Error = 500}Enum de string
Section titled “Enum de string”enum Color { Rojo = 'ROJO', Verde = 'VERDE', Azul = 'AZUL'}
let color: Color = Color.Rojo;console.log(color); // → 'ROJO'Enum heterogéneo (evitar)
Section titled “Enum heterogéneo (evitar)”Mezclar strings y números está permitido pero no se recomienda:
enum Mezclado { Si = 1, No = 'NO' // posible, pero confuso}const enum
Section titled “const enum”Los const enum se eliminan en la compilación y sus valores se inyectan directamente donde se usan. Esto reduce el runtime:
const enum Talla { Pequena = 'S', Mediana = 'M', Grande = 'L'}
let camiseta: Talla = Talla.Mediana;// Se compila como: let camiseta = "M";💻 Ejemplo
Section titled “💻 Ejemplo”enum EstadoPedido { Pendiente = 1, Confirmado, Enviado, Entregado, Cancelado}
function actualizarEstado(actual: EstadoPedido, nuevo: EstadoPedido): EstadoPedido { if (actual === EstadoPedido.Cancelado) { throw new Error('No se puede cambiar un pedido cancelado'); } return nuevo;}
let estado = EstadoPedido.Pendiente;estado = actualizarEstado(estado, EstadoPedido.Confirmado);console.log(EstadoPedido[estado]); // → 'Confirmado' (reverse mapping)📝 Ejercicio
Section titled “📝 Ejercicio”Crea un enum Rol con valores de string: Admin = 'ADMIN', Editor = 'EDITOR', Visor = 'VISOR'. Escribe una función tienePermiso(rol: Rol, accion: string): boolean que devuelva true si el rol tiene permiso para una acción (define las reglas que quieras, por ejemplo Admin puede todo, Editor puede editar/ver, Visor solo ver).
⚠️ Nota
Section titled “⚠️ Nota”Los enums numéricos tienen reverse mapping: puedes obtener el nombre a partir del valor (EstadoPedido[1] → 'Pendiente'). Los enums de string no tienen esta característica.
Si solo necesitas agrupar constantes sin comportamiento especial, considera usar union types en lugar de enums (type Estado = 'pendiente' | 'confirmado' | 'enviado'). Son más ligeros y más fáciles de componer. Usa enums cuando necesites iterar sobre los valores o usar reverse mapping.