Przejdź do treści

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    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 | boolean
    • Extract<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.