Przejdź do treści

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Asynchroniczność

    Awaited

    To, co zostaje po await — niezależnie od tego, jak głęboko była zagnieżdżona obietnica.

    Czym jest

    Jedyne wbudowane na tej stronie, które się rekurencyjnie zagłębia. Modeluje `await`, a nie rozpakowanie `Promise`: obietnica obietnicy spłaszcza się dokładnie tak jak w czasie wykonania, a to, co obietnicą nie jest, przechodzi bez zmian. Przeczytanie definicji to najszybszy sposób, by zrozumieć, dlaczego zagnieżdżone obietnice nigdy nie były czymś, czym trzeba się zajmować.

    Przykłady

    • Awaited<Promise<string>>
      string
    • Awaited<Promise<Promise<number>>>
      number

      Spłaszczone do końca, bo `await` robi to samo.

    • Awaited<string>
      string

      Await na nie-obietnicy jest legalny i nic nie robi, a typ to odzwierciedla.

    Każdy rozwinięty typ powyżej wypisał TypeScript 5.9.3, nie ręka człowieka.

    Czego nie robi

    • Nie rozpakowuje niczego wewnątrz obiektu. `Awaited<{ a: Promise<string> }>` pozostaje bez zmian — to podąża za `await`, a `await` nie chodzi po twoich właściwościach.
    • Nie opisuje odrzucenia. Ścieżka błędu nie ma w TypeScripcie żadnego typu i dlatego złapany błąd jest `unknown`.

    Wniosek

    Używaj `Awaited<ReturnType<typeof fn>>` dla rozwiązanego wyniku funkcji asynchronicznej. Ta para pojawia się częściej niż każde z osobna.