Volver a TypeScript Básico

Tipos e Interfaces

TypeScript añade tipos estáticos a JavaScript. Los tipos se eliminan en tiempo de compilación y no tienen ningún impacto en el rendimiento en tiempo de ejecución.

Anotaciones de Tipo Básicas

// Primitivos let nombre: string = "Alice"; let edad: number = 30; let activo: boolean = true; let datos: null = null; let valor: undefined = undefined; // TypeScript generalmente puede inferir estos let usuario = "Alice"; // inferido como string let puntuacion = 100; // inferido como number

Arrays y Tuplas

// Arrays const numeros: number[] = [1, 2, 3]; const nombres: Array<string> = ["Alice", "Bob"]; // Tupla — longitud y tipos fijos const punto: [number, number] = [10, 20]; const entrada: [string, number] = ["edad", 30]; // Desestructurar tupla const [x, y] = punto;

Tipos Unión e Intersección

// Unión — uno de los tipos listados type ID = string | number; let idUsuario: ID = "abc123"; idUsuario = 42; // también válido // Intersección — todos los tipos combinados type ConFecha = { creadoEn: Date }; type ConNombre = { nombre: string }; type Entidad = ConNombre & ConFecha; const entidad: Entidad = { nombre: "Producto", creadoEn: new Date(), };

Tipos Literales

type Direccion = "norte" | "sur" | "este" | "oeste"; type CodigoEstado = 200 | 201 | 400 | 401 | 403 | 404 | 500; type Interruptor = "encendido" | "apagado"; function mover(direccion: Direccion) { console.log(`Moviéndose hacia el ${direccion}`); } mover("norte"); // OK // mover("arriba"); // Error: no asignable a Direccion

Interfaces

interface Usuario { readonly id: number; nombre: string; correo: string; edad?: number; // Propiedad opcional rol: "admin" | "usuario" | "visitante"; } const usuario: Usuario = { id: 1, nombre: "Alice", correo: "[email protected]", rol: "admin", }; // Las interfaces pueden extenderse interface UsuarioAdmin extends Usuario { permisos: string[]; ultimoAcceso: Date; }

Type vs Interface

// Ambos pueden describir formas de objetos type Punto = { x: number; y: number }; interface Punto2 { x: number; y: number } // Interface — mejor para POO, soporta fusión de declaraciones interface Window { miPropiaPropiedad: string; // Se añade a la interfaz Window existente } // Type — mejor para uniones, intersecciones, tipos mapeados type Resultado<T> = { exito: true; datos: T } | { exito: false; error: string };

Aserciones de Tipo

// Cuando sabes más que TypeScript const input = document.querySelector("#correo") as HTMLInputElement; input.value = "[email protected]"; // Aserción de no-nulo (usar con moderación) const canvas = document.getElementById("canvas")!; // garantizado no-nulo

Guía: Prefiere interface para APIs públicas y formas de objetos. Usa type para uniones, intersecciones y tipos utilitarios. Evita las aserciones de tipo — corrige los tipos en su lugar.