Uniones
Non Nullable
Elimina null y undefined de un tipo.
Qué es
Merece la pena leer la definición. Antes era un condicional distributivo; desde TypeScript 4.8 es T & {}, porque intersecar con el tipo objeto vacío elimina exactamente los dos tipos que no pueden tener propiedades. Más corto, más rápido y ya no distributivo — lo cual solo importa en los rincones.
Ejemplos
NonNullable<string | null>→stringNonNullable<string | undefined | null>→stringNonNullable<null>→never
Cada tipo resuelto de arriba lo imprimió TypeScript 6.0.3, no se escribió a mano.
Lo que no hace
- No toca una propiedad anidada.
NonNullable<{ a: string | null }>no cambia — la nulabilidad está dentro, y esto actúa fuera. - No acota un valor en tiempo de ejecución. Una variable de tipo
string | nullsigue necesitando una comprobación; esto solo describe el tipo tras ella.
Conclusión
La definición cambió bajo los pies de todos en la 4.8 y casi nadie se dio cuenta, que es el argumento para citar definiciones en vez de recordarlas.

