5 TypeScript Utility Types I Use Every Day
Partial, Pick, Omit, Record, and Satisfies — the five types that made me stop writing manual interfaces for every variation.
The Big Five
Partial<T> makes every property of an existing type optional, which is particularly useful for update or PATCH-style forms where a user might only be changing a subset of an object's fields. Without Partial, you end up writing a parallel interface with every property manually marked optional, which has to be kept in sync with the original type as it evolves. Partial derives the optional version automatically, so changes to the original type propagate. Pick<T, K> constructs a new type containing only the specific keys you name — a clean way to define exactly the subset of props a smaller component actually needs from a larger shared type. Omit<T, K> does the inverse, handy when you want almost all of an existing type's shape except for one or two fields. A common pattern is `Omit<User, 'id'>` for a user-creation form, since the ID will be assigned by the backend.
Record<K, V> builds an object type where every key is of type K and every value is of type V, and it's become my default choice for typing lookup maps and dictionaries, like mapping a status enum to its corresponding display label. Record is preferable to a hand-written index signature because it's more explicit about the key type, and TypeScript can catch errors like `Record<string, X>` being indexed with a number that a hand-written `{ [key: string]: X }` would silently accept. The satisfies operator checks that an expression conforms to a given type without widening the inferred type the way an explicit annotation would. In practice it has caught more real type errors for me than any of the other four combined, because it lets TypeScript keep the narrower, more specific inferred type while still validating against a broader constraint. The pattern is `const config = { ... } satisfies ConfigType` — the object is checked against ConfigType, but config retains its narrower inferred type so you get autocomplete and type narrowing on the specific values.
