Rozwiązanie z komentarzem
Opublikowano 22 lipca 2026Rozwią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
T extends Promise<infer Inner>Dopasowuje `T` do kształtu `Promise<coś>` i wiąże to coś z `Inner`.
? Unwrap<Inner>Rekurencja. `Inner` samo może być obietnicą, więc to samo pytanie zadawane jest ponownie, aż odpowiedź brzmi „nie”.
: TPrzypadek 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.