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>>→stringUnwrap<number>→numberHead<[1, 2, 3]>
→1Ten 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.