Introducción

En TypeScript, los enums (abreviatura de "enumeraciones") son una característica que permite definir un conjunto de constantes con nombre. Los enums son útiles cuando se necesita representar un conjunto fijo de valores relacionados, como los días de la semana, los estados de una aplicación, o los roles de usuario.

Conceptos Clave

  • Definición de Enums: Cómo declarar y utilizar enums en TypeScript.
  • Enums Numéricos: Enums que asignan valores numéricos automáticamente.
  • Enums de Cadena: Enums que asignan valores de cadena.
  • Enums Heterogéneos: Enums que combinan valores numéricos y de cadena.
  • Uso de Enums: Cómo acceder y utilizar los valores de un enum.

Definición de Enums

Enums Numéricos

Los enums numéricos son el tipo más común de enums en TypeScript. Por defecto, los valores de los enums numéricos comienzan en 0 y se incrementan automáticamente.

enum Direction {
    Up,
    Down,
    Left,
    Right
}

let move: Direction = Direction.Up;
console.log(move); // Output: 0

En el ejemplo anterior, Direction.Up tiene el valor 0, Direction.Down tiene el valor 1, y así sucesivamente.

Enums de Cadena

Los enums de cadena permiten asignar valores de cadena a las constantes del enum.

enum Direction {
    Up = "UP",
    Down = "DOWN",
    Left = "LEFT",
    Right = "RIGHT"
}

let move: Direction = Direction.Up;
console.log(move); // Output: "UP"

Enums Heterogéneos

Los enums heterogéneos combinan valores numéricos y de cadena. Aunque es posible, su uso no es común y puede llevar a confusión.

enum BooleanLikeHeterogeneousEnum {
    No = 0,
    Yes = "YES"
}

let response: BooleanLikeHeterogeneousEnum = BooleanLikeHeterogeneousEnum.Yes;
console.log(response); // Output: "YES"

Uso de Enums

Acceso a Valores de Enum

Puedes acceder a los valores de un enum utilizando la notación de punto.

enum Direction {
    Up,
    Down,
    Left,
    Right
}

let move: Direction = Direction.Left;
console.log(move); // Output: 2

Enums y Tipos

Los enums también pueden ser utilizados como tipos para variables y parámetros de funciones.

enum Direction {
    Up,
    Down,
    Left,
    Right
}

function moveInDirection(direction: Direction) {
    console.log(`Moving in direction: ${direction}`);
}

moveInDirection(Direction.Right); // Output: Moving in direction: 3

Ejercicios Prácticos

Ejercicio 1: Crear un Enum Numérico

Crea un enum llamado Days que represente los días de la semana, comenzando con Sunday igual a 0.

enum Days {
    Sunday,
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday
}

let today: Days = Days.Friday;
console.log(today); // Output: 5

Ejercicio 2: Crear un Enum de Cadena

Crea un enum llamado Colors que represente los colores Red, Green, y Blue con valores de cadena.

enum Colors {
    Red = "RED",
    Green = "GREEN",
    Blue = "BLUE"
}

let favoriteColor: Colors = Colors.Green;
console.log(favoriteColor); // Output: "GREEN"

Ejercicio 3: Usar Enums en Funciones

Crea una función getDayName que tome un valor del enum Days y devuelva el nombre del día como una cadena.

enum Days {
    Sunday,
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday
}

function getDayName(day: Days): string {
    switch(day) {
        case Days.Sunday: return "Sunday";
        case Days.Monday: return "Monday";
        case Days.Tuesday: return "Tuesday";
        case Days.Wednesday: return "Wednesday";
        case Days.Thursday: return "Thursday";
        case Days.Friday: return "Friday";
        case Days.Saturday: return "Saturday";
        default: return "Unknown";
    }
}

console.log(getDayName(Days.Wednesday)); // Output: "Wednesday"

Resumen

En esta sección, hemos aprendido sobre los enums en TypeScript, incluyendo cómo definir enums numéricos, de cadena y heterogéneos. También hemos visto cómo acceder y utilizar los valores de un enum, y cómo emplearlos en funciones. Los enums son una herramienta poderosa para manejar conjuntos de valores constantes de manera clara y organizada.

En el próximo módulo, exploraremos las clases en TypeScript, una característica fundamental para la programación orientada a objetos.

© Copyright 2024. Todos los derechos reservados