Przejdź do treści

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Operatory

    infer

    Deklaruje zmienną, którą kompilator wypełnia, dopasowując wzorzec.

    Czym jest

    Legalne wyłącznie w klauzuli `extends` typu warunkowego i użyteczne tylko w gałęzi prawdziwej. Czytaj `T extends Promise<infer U>` jako „czy `T` wygląda jak obietnica czegoś, a jeśli tak, nazwij to coś `U`” — ten sam kształt co destrukturyzacja, przeniesiony na poziom typów.

    Przykłady

    • Unwrap<Promise<string>>
      string
    • Unwrap<number>
      number
    • Head<[1, 2, 3]>
      1

      Ten sam operator wobec wzorca krotki. `infer` nie obchodzi, jaki kształt dopasowujesz.

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

    Czego nie robi

    • Nie da się go użyć w gałęzi fałszywej. `U` tam nie istnieje, bo nic nie pasowało i nie było czego nazwać.
    • Nie wybiera jednego, gdy pasuje kilka. Wiele `infer` o tej samej nazwie w jednej pozycji daje unię, a w pozycjach argumentów przecięcie — to sztuczka, nie usterka.

    Wniosek

    Jeśli potrafisz opisać szukany kształt, `infer` poda ci z niego kawałek, o który chodziło. Większość sprytu standardowej biblioteki to ten jeden operator.