Przejdź do treści
webtype.orgwebtype.org

    ↑↓ 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 6.0.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.