Przejdź do treści
webtype.orgwebtype.org

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