Narrowing significa tomar un tipo amplio y "estrecharlo" a uno más específico. TypeScript es lo suficientemente inteligente como para entender tus verificaciones y ajustar el tipo automáticamente.
Dentro de cada rama del if, TypeScript sabe exactamente qué tipo tiene valor. No necesitas hacer casting manual — TypeScript lo deduce de tu lógica.
typeof funciona para tipos primitivos:
Los valores posibles de typeof son: "string", "number", "boolean", "object", "function", "undefined", "bigint", "symbol".
En JavaScript, valores como null, undefined, 0, "" y false son "falsy". TypeScript usa esto para narrowing:
if (nombre) descarta null y undefined de la ecuación.
Comparar con un valor específico también refina:
TypeScript entiende que si dos uniones son iguales, solo pueden ser del tipo que comparten.
Para objetos, in verifica si una propiedad existe:
Si "nadar" está en el objeto, TypeScript sabe que es un Pez.
El narrowing aplica en toda la rama del código:
Cada verificación reduce las posibilidades, y TypeScript lo rastrea.
Crea una función describir que reciba valor: string | number | boolean | null y devuelva un mensaje descriptivo diferente para cada tipo:
"Es un texto: ...""Es un número: ...""Es un booleano: ...""No hay valor"Usa typeof para el narrowing. Prueba con los cuatro tipos.
Narrowing es lo que hace que los union types sean prácticos. TypeScript no solo te dice "puede ser A o B" — te ayuda a manejar cada caso de forma segura.