MÓDULO 1: TYPESCRIPT

Funciones y Retornos

Las **funciones tipadas** nos dan control total sobre los parámetros que recibe y lo que retorna. TypeScript nos obliga a definir tipos para entradas y salidas, evitando errores comunes y haciendo el código más predecible.


1. Funciones Básicas con Tipos

Definimos tipos para parámetros y retorno explícitamente.

// función con parámetros tipados y retorno explícito
function calcularDaño(ataque: number, defensa: number): number {
    return ataque - defensa * 0.5;
}

// uso
const daño = calcularDaño(100, 30); // daño: number = 85

Sintaxis Alternativa (Type Alias)

type CalculoBasico = (a: number, b: number) => number;

const sumaPuntos: CalculoBasico = (ataque, bonus) => ataque + bonus;

2. Funciones con Múltiples Parámetros

Perfectas para lógica de combate compleja.

function atacarEnemigo(
    nombre: string, 
    vidaActual: number, 
    daño: number
): [string, number] { // retorna tupla
    const vidaNueva = vidaActual - daño;
    return [nombre, vidaNueva];
}

const [enemigo, vidaRestante] = atacarEnemigo("Goblin", 150, 45);

Parámetros Opcionales

function lanzarHabilidad(
    nombre: string, 
    manaCosto: number, 
    daño?: number // opcional
): string {
    if (daño) {
        return `${nombre} hace ${daño} daño`;
    }
    return `${nombre} se lanza sin daño`;
}

3. Funciones con Tipos de Retorno Complejos

interface ResultadoCombate {
    ganador: string;
    dañoTotal: number;
    critico: boolean;
}

function simularCombate(
    jugadorAtaque: number, 
    enemigoAtaque: number
): ResultadoCombate {
    const dañoJugador = jugadorAtaque * (Math.random() > 0.7 ? 2 : 1);
    const dañoEnemigo = enemigoAtaque * 0.8;
    
    return {
        ganador: dañoJugador > dañoEnemigo ? "Jugador" : "Enemigo",
        dañoTotal: dañoJugador + dañoEnemigo,
        critico: dañoJugador > jugadorAtaque * 1.5
    };
}

4. Funciones Genéricas (Bonus)

Funciones que trabajan con cualquier tipo manteniendo la seguridad de tipos.

function obtenerMejor<T>(a: T, b: T): T {
    // lógica simplificada
    return Math.random() > 0.5 ? a : b;
}

const mejorArma = obtenerMejor("Espada", "Hacha"); // string
const mejorStats = obtenerMejor(100, 120); // number

5. Ventajas de Funciones Tipadas

Autocompletado: IDE sugiere parámetros y tipos de retorno.
Errores tempranos: TypeScript detecta problemas antes de ejecutar.
Documentación viva: Los tipos explican qué hace cada función.

🛠️ Tu Misión

Prueba esto en TypeScript Playground:

  1. Crea una función calcularExperiencia que reciba nivel y enemigosDerrotados, y retorne number.
  2. Crea una función crearPersonaje que retorne una interfaz Personaje con nombre, vida y nivel.
  3. Bonus: Crea una función genérica esMayor que compare dos valores de cualquier tipo numérico.
  4. Extra: Función con parámetros opcionales para calcular daño con crítico aleatorio.