Przejdź do treści
webtype.orgwebtype.org#213 unwrap-promise · par 3

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Nr 213 · 21 lipca 2026 · Średnia

    Rozpakuj

    Zaimplementuj `Unwrap<T>`, aby zdejmował każdą warstwę `Promise`, niezależnie od zagnieżdżenia. Typ niebędący obietnicą przechodzi bez zmian.

    01

    Spróbuj rozwiązać samodzielnie

    Par 3

    Zagadka

    unwrap-promise.ts
    Podejście 1 z 3Jeszcze nie sprawdzone

    Zastąp ??? — rozwiązanie sprawdzamy przypadkami poniżej. Tab wcina; naciśnij Escape, a potem Tab, by wyjść fokusem.

    Testy

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

    Jak oceniamy test Dokładna równość typów, nie przypisywalność — przecięcie to nie to samo co spłaszczony obiekt.

    Jak poszło innym

    Tę zagadkę rozwiązało jak dotąd mniej niż 5 osób. Rozkład pojawi się, gdy próbka będzie na tyle duża, by coś znaczyć.

    Gra na krótkim dystansie

    Najmniej znaków

    Nie ma jeszcze publicznych wyników.

    Archiwum
    02

    Rozwiązanie z komentarzem

    Opublikowano 22 lipca 2026

    Rozwiązanie

    type Unwrap<T> = T extends Promise<infer Inner> ? Unwrap<Inner> : T

    Najczęstsza błędna odpowiedź

    type Unwrap<T> = T extends Promise<infer Inner> ? Inner : T

    To zdejmuje dokładnie jedną warstwę. `Promise<Promise<number>>` staje się `Promise<number>` i na tym koniec. Dopiero wywołanie rekurencyjne czyni to kompletnym.

    Linia po linii

    1. T extends Promise<infer Inner>

      Dopasowuje `T` do kształtu `Promise<coś>` i wiąże to coś z `Inner`.

    2. ? Unwrap<Inner>

      Rekurencja. `Inner` samo może być obietnicą, więc to samo pytanie zadawane jest ponownie, aż odpowiedź brzmi „nie”.

    3. : T

      Przypadek bazowy. To nie obietnica, więc `T` jest już typem wartości.

    Do zapamiętania

    Typ warunkowy wywołujący sam siebie w gałęzi prawdziwej to odpowiednik pętli `while` na poziomie typów. Gałąź fałszywa jest wyjściem.

    Wykorzystuje