TypeScript Utility Types Deep Dive Cheat Sheet
Covers Partial, Pick, Omit, Record, Extract, Exclude, function-derived utility types, and string manipulation types with examples.
2 PagesAdvancedApr 10, 2026
Partial, Required, Readonly, Pick, Omit
Derive new object shapes from an existing interface.
typescript
interface User { id: number; name: string; email: string; age?: number; }type PartialUser = Partial<User>; // all props optionaltype RequiredUser = Required<User>; // all props required (age no longer optional)type ReadonlyUser = Readonly<User>; // all props readonlytype UserPreview = Pick<User, 'id' | 'name'>; // { id: number; name: string }type UserWithoutEmail = Omit<User, 'email'>; // all props except email
Record, Extract, Exclude, NonNullable
Build and filter types based on unions and keys.
typescript
type Role = 'admin' | 'editor' | 'viewer';type Permissions = Record<Role, string[]>; // { admin: string[]; editor: string[]; viewer: string[] }type T1 = Extract<'a' | 'b' | 'c', 'a' | 'c'>; // 'a' | 'c'type T2 = Exclude<'a' | 'b' | 'c', 'a'>; // 'b' | 'c'type T3 = NonNullable<string | null | undefined>; // string
ReturnType, Parameters, Awaited
Extract type information directly from function signatures.
typescript
function createUser(name: string, age: number) { return { name, age, id: crypto.randomUUID() };}type CreateUserReturn = ReturnType<typeof createUser>; // { name: string; age: number; id: string }type CreateUserParams = Parameters<typeof createUser>; // [name: string, age: number]async function fetchUser(): Promise<User> { /* ... */ return {} as User; }type FetchedUser = Awaited<ReturnType<typeof fetchUser>>; // User (unwraps the Promise)
String Manipulation Utility Types
Transform string literal types at compile time.
typescript
type Greeting = 'hello world';type T4 = Uppercase<Greeting>; // 'HELLO WORLD'type T5 = Lowercase<'FOO'>; // 'foo'type T6 = Capitalize<'foo'>; // 'Foo'type T7 = Uncapitalize<'Foo'>; // 'foo'// Often combined with template literal typestype EventName<T extends string> = `on${Capitalize<T>}`;type Click = EventName<'click'>; // 'onClick'
Quick Reference
The most commonly used built-in utility types.
- Partial<T>- Makes every property optional
- Required<T>- Makes every property required, removing optional modifiers
- Readonly<T>- Makes every property readonly
- Pick<T, K>- Builds a type with only the listed keys K
- Omit<T, K>- Builds a type with every key except K
- Record<K, V>- Builds an object type mapping each key in K to type V
- Exclude<T, U> / Extract<T, U>- Removes/keeps union members assignable to U
- ReturnType<T> / Parameters<T>- Extracts a function's return type or tuple of parameter types
- Awaited<T>- Recursively unwraps Promise types
- InstanceType<T>- Extracts the instance type of a class constructor type
Pro Tip
Chain utility types instead of hand-writing derived shapes - e.g. Partial<Pick<User, 'name' | 'email'>> for a PATCH request body - so the derived type automatically stays in sync when the source interface changes.
Was this cheat sheet helpful?
Explore Topics
#TypeScriptUtilityTypesDeepDive#TypeScriptUtilityTypesDeepDiveCheatSheet#Programming#Advanced#Partial#Required#Readonly#Pick#Functions#CheatSheet#SkillVeris