Unie
Extract
Zachowuje z unii tylko składniki przypisywalne do `U`. Dopełnienie `Exclude`.
Czym jest
Ten sam dystrybutywny warunek z zamienionymi gałęziami. Jego najprzydatniejsze zastosowanie to nie filtrowanie prymitywów, lecz ponowne zawężanie unii rozłącznej: mając unię kształtów i dyskryminator, `Extract` daje ci ten jeden składnik, o który chodziło.
Przykłady
Extract<'a' | 'b' | 'c', 'a' | 'c'>
→"a" | "c"Extract<string | number | boolean, string | boolean>
→string | booleanExtract<Shape, { kind: 'circle' }>→{ kind: "circle"; r: number; }To zastosowanie naprawdę się opłaca: wyciągnięcie jednego składnika z unii rozłącznej po jego znaczniku.
Każdy rozwinięty typ powyżej wypisał TypeScript 5.9.3, nie ręka człowieka.
Czego nie robi
- Nie zawęża wartości. `Extract` działa na typach; zawężenie zmiennej w czasie wykonania wciąż wymaga sprawdzenia, za którym kompilator nadąży.
- Nie zgłasza błędu, gdy nic nie pasuje — po cichu daje `never`, a pomyłka wychodzi gdzie indziej.
Wniosek
`Extract<Union, { tag: "x" }>` to typowa wersja zawężenia, które i tak piszesz przez `if`. Sięgaj po nie, gdy generyk potrzebuje jednego składnika z przekazanej unii.