Object shapes
Pick
Keeps only the named keys, and checks that they exist.
What it is
A mapped type over K rather than over keyof T, which is why the result is a plain object rather than a copy of the original. The constraint K extends keyof T is doing real work: pick a key that is not there and the error arrives at the type, not later at a property access.
Examples
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; }readonlyis carried across, becausePickmaps over a key set derived fromT.
Each resolved type above was printed by TypeScript 6.0.3, not written by hand.
What it does not do
- It does not accept keys that are missing. That is a feature, and it is the difference between
PickandOmit— the latter accepts anything. - It does not distribute over a union in
T.Pick<A | B, K>picks from the union as one thing rather than from each member.
Takeaway
When you want a subset and you want to be told about typos, Pick is the one with the guard rail.

