Saltar al contenido
webtype.org#213 unwrap-promise · par 3

N.º 213 · 21 de julio de 2026 · Media

Desenvuelve

Implementa `Unwrap<T>` para que quite todas las capas de `Promise`, por muy anidadas que estén. Un tipo que no sea promesa pasa sin cambios.

01

Intenta el puzle tú mismo

Par 3

Puzle

unwrap-promise.ts
Intento 1 de 3Aún sin comprobar

Sustituye ??? — tu solución se comprueba con los casos de abajo.

Comprobaciones

4
  • Unwrap<Promise<string>>
    string
  • Unwrap<Promise<Promise<number>>>
    number
  • Unwrap<boolean>
    boolean
  • Unwrap<Promise<Promise<Promise<null>>>>
    null

Cómo se juzga una comprobación Igualdad exacta de tipos, no asignabilidad — una intersección no es lo mismo que el objeto aplanado.

Cómo le fue a todo el mundo

Nobody is counting yet. Score distribution and the juego corto board arrive with accounts — until then your results stay on this device.

Archivo
02

Solución comentada

Publicado el 22 de julio de 2026

La 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

  1. T extends Promise<infer Inner>

    Empareja `T` con la forma `Promise<algo>` y vincula ese algo a `Inner`.

  2. ? 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.

  3. : T

    El 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.