Solución comentada
Publicado el 22 de julio de 2026La solución
type Unwrap<T> = T extends Promise<infer Inner> ? Unwrap<Inner> : T
El error más común
type Unwrap<T> = T extends Promise<infer Inner> ? Inner : T
Esto quita exactamente una capa. `Promise<Promise<number>>` queda en `Promise<number>` y se detiene. La llamada recursiva es lo que lo hace total.
Línea por línea
T extends Promise<infer Inner>Empareja `T` con la forma `Promise<algo>` y vincula ese algo a `Inner`.
? Unwrap<Inner>Recursión. `Inner` puede ser a su vez una promesa, así que se repite la misma pregunta hasta que la respuesta sea no.
: TEl caso base. No es una promesa, así que `T` ya es el tipo del valor.
Para recordar
Un tipo condicional que se llama a sí mismo en la rama verdadera es el equivalente a un bucle `while` a nivel de tipos. La rama falsa es la salida.