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 5.9.3, no se escribió a mano.
Lo que no hace
- No acota un valor. `Extract` opera 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ó.