TypeScriptIntermedio23 oct 2025
El Misterio de la Propiedad 'Nunca': Intersecciones Imposibles
snippet.typescript
type UserPreferences = {
theme: "dark" | "light";
fontSize: number;
};
type AdminSettings = {
theme: "admin" | "corporate";
maxUsers: number;
};
type AdvancedUserAdmin = UserPreferences & AdminSettings;
const settings: AdvancedUserAdmin = {
theme: "dark", // ¡WTF! Esto causa un error de compilación
fontSize: 16,
maxUsers: 100,
};¿Qué crees que imprime?
✅ Salida Esperada
Uno esperaría que la propiedad `theme` fuese un tipo de unión (ej. `"dark" | "light" | "admin" | "corporate"`), o que TypeScript emitiera un error en la definición del tipo `AdvancedUserAdmin` por el conflicto.⚠️ Salida Real
Error de compilación de TypeScript:
`Type '"dark"' is not assignable to type 'never'.`¿Por qué pasa esto?
Cuando los **tipos de intersección** (`&`) de TypeScript se encuentran con propiedades con el mismo nombre pero **tipos incompatibles**, ¡la cosa se pone salvaje! Imagina a dos arquitectos geniales diseñando una casa. Uno dice que la puerta principal debe ser un `string` ("roble", "cristal"), el otro insiste en que debe ser un `number` (`1` para sólida, `2` para hueca). 🤯
TypeScript, en su infinita sabiduría (y estrictez), ve el conflicto y declara: "¡Esta puerta **jamás** podrá existir!" El tipo resultante para esa propiedad se convierte en `never`. Es el tipo inferior, que significa "ningún valor posible puede ser asignado aquí". Así que, cuando intentas asignar `"dark"` a `theme` en `AdvancedUserAdmin`, el compilador grita porque `"dark"` no es `never`. ¡Es como intentar meter un cuadrado en un agujero de "nunca"! 🚫
Esto no es un tema de ejecución; es el **sistema de tipos** levantando las manos ante una intersección imposible. ¡Usa **tipos de unión** (`|`) si quieres opciones, o renombra las propiedades en conflicto!
Conceptos relacionados
type-systemintersection-typesnever-type