CAP 03 · LEC 02·Control de flujo

switch: múltiples ramas sin anidamiento

switch es la alternativa legible a una cadena larga de else if cuando comparas un solo valor contra múltiples opciones fijas.

● PRINCIPIANTE6 min lectura3 ejerciciospor Fernando Herrera · actualizado mayo de 2026
¿Encontraste un error o algo que mejorar?Editá esta lección en GitHub →

Sintaxis básica

const dia = "lunes"; switch (dia) { case "lunes": console.log("Inicio de semana"); break; case "viernes": console.log("¡Por fin viernes!"); break; case "sábado": case "domingo": console.log("Fin de semana"); break; default: console.log("Entre semana"); }
type Dia = "lunes" | "martes" | "miércoles" | "jueves" | "viernes" | "sábado" | "domingo"; function describeDia(dia: Dia): string { switch (dia) { case "sábado": case "domingo": return "Fin de semana"; case "viernes": return "¡Por fin viernes!"; default: return "Entre semana"; } }
SalidaInicio de semana
El break es obligatorio

Sin break, el código continúa ejecutando los casos siguientes (fall-through). Esto es un bug en el 99% de los casos. Siempre añade break o usa return dentro de una función.

switch vs if / else if

switchif / else if
Cuándo usarloValor exacto contra lista fija de opcionesCondiciones complejas, rangos, múltiples variables
LegibilidadMuy limpio con muchas opcionesSe anida con muchas ramas
ExpresividadSolo igualdad estrictaCualquier expresión
TypeScript exhaustivoPuede detectar casos no manejadosMás difícil de hacer exhaustivo

Switch exhaustivo en TypeScript

TypeScript puede garantizar que hayas manejado todos los casos de un tipo union usando never:

type Forma = "círculo" | "rectángulo" | "triángulo"; function calcularArea(forma: Forma, ...args: number[]): number { switch (forma) { case "círculo": return Math.PI * args[0] ** 2; case "rectángulo": return args[0] * args[1]; case "triángulo": return (args[0] * args[1]) / 2; default: { const _exhaustive: never = forma; // Si añades un nuevo tipo a Forma sin manejar aquí, // TypeScript muestra un error en _exhaustive throw new Error(`Forma no manejada: ${_exhaustive}`); } } }

Practica