Volver a TypeScript Básico
TypeScript
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
interfacepara APIs públicas y formas de objetos. Usatypepara uniones, intersecciones y tipos utilitarios. Evita las aserciones de tipo — corrige los tipos en su lugar.