Uniones
Extract
Conserva de una unión solo los miembros asignables a U. El complemento de Exclude.
Qué es
El mismo condicional distributivo con las ramas intercambiadas. Su aplicación más útil no es filtrar primitivos sino volver a acotar una unión discriminada: dada una unión de formas y un discriminante, Extract te da el miembro que querías.
Ejemplos
Extract<'a' | 'b' | 'c', 'a' | 'c'>→"a" | "c"Extract<string | number | boolean, string | boolean>→string | booleanExtract<Shape, { kind: 'circle' }>→{ kind: "circle"; r: number; }Esta es la que vale la pena: sacar un único miembro de una unión discriminada por su etiqueta.
Cada tipo resuelto de arriba lo imprimió TypeScript 6.0.3, no se escribió a mano.
Lo que no hace
- No acota un valor.
Extractopera sobre tipos; acotar una variable en tiempo de ejecución sigue necesitando una comprobación que el compilador pueda seguir. - No da error cuando nada coincide — te devuelve
never, en silencio, y el fallo aflora en otro sitio.
Conclusión
Extract<Union, { tag: "x" }> es la versión a nivel de tipos del acotado que ya escribes con if. Úsalo cuando un genérico necesita un miembro de la unión que recibió.

