Formas de objeto
Pick
Conserva solo las claves nombradas, y comprueba que existan.
Qué es
Un tipo mapeado sobre `K` y no sobre `keyof T`, por eso el resultado es un objeto llano y no una copia del original. La restricción `K extends keyof T` hace trabajo real: elige una clave que no existe y el error llega en el tipo, no después en un acceso a propiedad.
Ejemplos
Pick<{ a: string; b: number }, 'a'>→{ a: string; }Pick<{ a: string; b: number; c: boolean }, 'a' | 'c'>→{ a: string; c: boolean; }Pick<{ readonly a: string }, 'a'>→{ readonly a: string; }`readonly` se traslada, porque `Pick` mapea sobre un conjunto de claves derivado de `T`.
Cada tipo resuelto de arriba lo imprimió TypeScript 5.9.3, no se escribió a mano.
Lo que no hace
- No acepta claves que no existen. Es una virtud, y es la diferencia con `Omit` — este último acepta cualquier cosa.
- No distribuye sobre una unión en `T`. `Pick<A | B, K>` elige de la unión como un todo, no de cada miembro.
Conclusión
Cuando quieres un subconjunto y quieres que te avisen de las erratas, `Pick` es el que tiene la barandilla.