Unions
Extract
Keeps from a union only the members assignable to U. The complement of Exclude.
What it is
The same distributive conditional with the branches swapped. Its most useful application is not filtering primitives but re-narrowing a discriminated union: given a union of shapes and a discriminant, Extract gets you the one member you meant.
Examples
Extract<'a' | 'b' | 'c', 'a' | 'c'>→"a" | "c"Extract<string | number | boolean, string | boolean>→string | booleanExtract<Shape, { kind: 'circle' }>→{ kind: "circle"; r: number; }This is the one that earns its keep: pulling a single member back out of a discriminated union by its tag.
Each resolved type above was printed by TypeScript 6.0.3, not written by hand.
What it does not do
- It does not narrow a value.
Extractoperates on types; narrowing a variable at run time still needs a check the compiler can follow. - It does not error when nothing matches — it gives you
never, quietly, and the mistake surfaces somewhere else.
Takeaway
Extract<Union, { tag: "x" }> is the type-level version of the narrowing you already write with if. Reach for it when a generic needs one member of a union it was handed.

