typescript-enums

Uso de Enums en TypeScript

Un enum (enumeración) es una característica de TypeScript que permite definir un conjunto de valores constantes bajo un mismo nombre.

Para definir un enum, se utiliza la palabra clave enum seguida del nombre del enum y un bloque de llaves que contiene los valores del enum.

enum NombreEnum {
    VALOR1,
    VALOR2,
    VALOR3
}

Vamos a verlo con un ejemplo,

enum Direccion {
    Norte,
    Sur,
    Este,
    Oeste
}

let direccionActual: Direccion = Direccion.Norte;

console.log(direccionActual); // Output: 0
console.log(Direccion[direccionActual]); // Output: Norte

En este ejemplo, Direccion es un enum que define cuatro valores: Norte, Sur, Este y Oeste. Los valores del enum son automáticamente asignados a números enteros, comenzando desde 0.

Enums Numéricos

Por defecto, los enums en TypeScript son numéricos. Cada valor en el enum se asigna a un número, comenzando desde 0 y aumentando en 1 para cada valor subsiguiente.

Personalización de valores numéricos

Se pueden personalizar los valores numéricos asignados a cada miembro del enum.

enum Estado {
    Inactivo = 0,
    Activo = 1,
    Pausado = 2
}

let estadoActual: Estado = Estado.Activo;

console.log(estadoActual); // Output: 1

Incremento automático

Si se define un valor numérico explícito para un miembro del enum, los valores subsiguientes se incrementarán automáticamente a partir de ese valor.

enum Semana {
    Lunes = 1,
    Martes,
    Miercoles,
    Jueves,
    Viernes
}

console.log(Semana.Lunes); // Output: 1
console.log(Semana.Martes); // Output: 2
console.log(Semana.Viernes); // Output: 5

Enums de String

Además de los enums numéricos, TypeScript también permite definir enums de string, donde cada miembro del enum se asigna a una cadena de texto.

enum Color {
    Rojo = "Rojo",
    Verde = "Verde",
    Azul = "Azul"
}

let colorFavorito: Color = Color.Verde;

console.log(colorFavorito); // Output: Verde

En este ejemplo, Color es un enum de cadena que define tres valores: Rojo, Verde y Azul.

Enums heterogéneos

Aunque no es una práctica común (ni probablemente recomendable 😅) TypeScript permite definir enums que mezclan valores numéricos y de cadena.

enum Mixto {
    No = 0,
    Si = "Sí"
}

console.log(Mixto.No); // Output: 0
console.log(Mixto.Si); // Output: Sí

Ejemplos prácticos

Comparaciones

Los enums son útiles para realizar comparaciones claras y legibles en el código.

enum Respuesta {
    No = 0,
    Si = 1
}

function responder(respuesta: Respuesta): void {
    if (respuesta === Respuesta.Si) {
        console.log("Respuesta positiva.");
    } else {
        console.log("Respuesta negativa.");
    }
}

responder(Respuesta.Si); // Output: Respuesta positiva.

Iteración sobre Enums

Se puede iterar sobre los valores de un enum utilizando bucles y la función Object.keys.

enum Talla {
    Pequeña,
    Mediana,
    Grande
}

for (let talla in Talla) {
    if (isNaN(Number(talla))) {
        console.log(talla); // Output: Pequeña, Mediana, Grande
    }
}