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.
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
type CalculoBasico = (a: number, b: number) => number;
const sumaPuntos: CalculoBasico = (ataque, bonus) => ataque + bonus;
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);
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`;
}
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
};
}
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
Prueba esto en TypeScript Playground:
calcularExperiencia que reciba nivel y enemigosDerrotados, y retorne number.crearPersonaje que retorne una interfaz Personaje con nombre, vida y nivel.esMayor que compare dos valores de cualquier tipo numérico.