The Utility Types Worth Learning First
Partial<T> makes every property of T optional — perfect for update payloads where you only send the changed fields. Pick<T, K> creates a new type with only the keys you specify — ideal for form state that only touches some fields of a larger entity. Omit<T, K> is the inverse — everything except the keys you name.
Required<T> is the opposite of Partial — it makes every property non-optional. I use it in normalisation layers where I want to assert that a value coming from an API has been validated and all fields are present.
The More Powerful Ones That Took Longer to Appreciate
ReturnType<typeof fn> extracts the return type of a function without you having to declare it separately. This is invaluable when the function is complex or when you want the return type to update automatically when the function changes.
Record<K, V> is my most-used utility type by far. It creates an object type with keys of type K and values of type V. Used for lookup maps, BADGE_COLORS constants, API response caches — anywhere you have a key-value structure where the key set is known.
Key takeaways
- Start with Partial, Pick, Omit, and Record — they cover 80% of type transformation needs and are immediately applicable in any TypeScript codebase
- Use ReturnType<typeof fn> instead of manually typing function return values — the type stays accurate automatically as the function evolves
- Combine utility types to build complex derived types: Partial<Pick<User, 'name' | 'email'>> is cleaner and safer than a manually-written interface
Conclusion
Utility types are TypeScript's force multiplier. Once you know them, you write fewer types, have less duplication, and your types stay accurate as your code changes. They're the feature that turned me from 'TypeScript is a necessary evil' to 'TypeScript is genuinely good.'
Enjoyed this article?

Vivek Kumar Singh
Technical Expert · Full Stack Cloud Engineer · Tokyo, Japan
Related articles
TypeScript Caught My Bug Before It Hit Production — I Owe It an Apology
November 20, 2024 · 5 min read
Stop Writing `any` in TypeScript — Here's What Actually Works
December 5, 2024 · 6 min read
VivekUI: A Free React Component Library With Zero Dependencies
August 23, 2026 · 9 min read