Los **tipos personalizados** (Type Aliases) nos permiten crear nuestros propios tipos complejos combinando primitivos, uniones, intersecciones y más. Son la herramienta definitiva para modelar datos específicos de nuestro juego.
Renombramos tipos existentes para mayor claridad.
type VidaMaxima = number;
type NombrePersonaje = string;
type Coordenada2D = [number, number];
const saludHeroe: VidaMaxima = 500;
const posEnemigo: Coordenada2D = [100, 200];
Un valor puede ser uno de varios tipos posibles.
type RarezaItem = "Común" | "Rara" | "Épica" | "Legendaria";
type TipoArma = "Espada" | "Arco" | "Bastón";
type ItemBasico = {
nombre: string;
rareza: RarezaItem;
tipo?: TipoArma;
};
const espadaLegendaria: ItemBasico = {
nombre: "Excalibur",
rareza: "Legendaria",
tipo: "Espada"
};
⚠️ TypeScript solo acepta valores de la unión: "Común", "Rara", "Épica", "Legendaria".
Combinamos múltiples tipos en uno solo.
type EstadisticasBase = {
vida: number;
ataque: number;
defensa: number;
};
type Identidad = {
nombre: string;
id: number;
};
type PersonajeCompleto = EstadisticasBase & Identidad & {
clase: string;
};
const arqueroElite: PersonajeCompleto = {
nombre: "Sylvana",
id: 42,
clase: "Arquero",
vida: 250,
ataque: 85,
defensa: 35
};
Tipos que dependen de otras propiedades.
type ItemConMana<T extends string> = T extends "Mago" ?
{ nombre: string; manaCosto: number } :
{ nombre: string; danoFisico: number };
// Para mago
const bolaFuego: ItemConMana<"Mago"> = {
nombre: "Bola de Fuego",
manaCosto: 25
};
// Para guerrero
const hachazo: ItemConMana<"Guerrero"> = {
nombre: "Hachazo Brutal",
danoFisico: 120
};
type StatsBase = {
vida: number;
ataque: number;
mana: number;
};
// Hace todas las propiedades opcionales
type StatsParciales = {
[K in keyof StatsBase]?: StatsBase[K];
};
const statsIniciales: StatsParciales = {
vida: 100
// ataque y mana son opcionales
};
Prueba esto en TypeScript Playground:
type EstadoCombate con unión: "peleando" | "explorando" | "muerto".type StatsHeroe como intersección de vida, ataque y nombre.type Inventario como array de objetos con nombre y rareza (union type).