MÓDULO 1: TYPESCRIPT

Tuplas y Enums

Las **Tuplas** nos permiten crear arrays con un número fijo de elementos donde cada posición puede tener un tipo diferente. Los **Enums** nos ayudan a definir un conjunto de constantes con nombres claros, muy útiles para estados, tipos de enemigos, rarezas, etc.


1. Tuplas (Tuples)

Una tupla es como un array con estructura fija y tipos específicos por posición.

// [nombre, nivel, vida, daño]
let jugador: [string, number, number, number] = [
  "Legend", 
  15, 
  320, 
  45
];

Ejemplo práctico: Coordenadas y Color

type Coordenada = [number, number, number]; // x, y, z
type ColorRGB = [number, number, number];

const posicionJugador: Coordenada = [120.5, 45.8, 300];
const colorEnemigo: ColorRGB = [255, 50, 50];

Nota: Las tuplas son ideales cuando el orden y la cantidad de valores son fijos (posición, estadísticas básicas, etc.).


2. Enums (Enumeraciones)

Los enums permiten definir un conjunto de constantes con nombres significativos.

enum Rareza {
  Comun = "Común",
  Rara = "Rara",
  Epica = "Épica",
  Legendaria = "Legendaria"
}

enum EstadoJugador {
  Vivo,
  Muerto,
  EnCombate,
  EnInventario
}

Ejemplo completo con Enums

enum TipoEnemigo {
  Humanoide,
  Bestia,
  Dragón,
  NoMuerto,
  Elemental
}

interface Enemigo {
  nombre: string;
  tipo: TipoEnemigo;
  rareza: Rareza;
  vida: number;
}

const jefeFinal: Enemigo = {
  nombre: "Dragón Ancestral",
  tipo: TipoEnemigo.Dragón,
  rareza: Rareza.Legendaria,
  vida: 2500
};

3. Combinando Tuplas y Enums

enum Direccion {
  Norte,
  Sur,
  Este,
  Oeste
}

// [x, y, dirección, velocidad]
type Movimiento = [number, number, Direccion, number];

const movimientoJugador: Movimiento = [10, 25, Direccion.Este, 5.5];

4. Ventajas de usar Enums y Tuplas

Enums: Código más legible, evita errores de escritura (magic strings), autocompletado en IDE.
Tuplas: Estructura fija y tipos por posición. Ideal para datos con formato conocido.

🛠️ Tu Misión

Prueba esto en TypeScript Playground:

  1. Crea un Enum llamado RarezaItem con al menos 4 rarezas (Común, Rara, Épica, Legendaria).
  2. Crea una tupla para representar la posición de un jugador: [x: number, y: number, z: number].
  3. Crea una interfaz Item que use el Enum RarezaItem y un array tipado de items.
  4. Bonus: Crea un Enum para ClasePersonaje y una tupla que represente estadísticas básicas de un personaje: [clase, nivel, vida, ataque].