TypeScript Utility Types — Complete Guide with Examples

Every TypeScript utility type explained: Partial, Required, Pick, Omit, Record, Exclude, Extract, NonNullable.

Object Manipulation

interface User {
  id: number;
  name: string;
  email: string;
  age?: number;
}

type PartialUser = Partial<User>;          // All optional
type RequiredUser = Required<User>;        // All required
type UserName = Pick<User, 'id' | 'name'>; // Only id, name
type NoEmail = Omit<User, 'email'>;        // Everything except email
type ReadonlyUser = Readonly<User>;        // All readonly

Record Type

// Create object type with specific key/value types
type UserMap = Record<string, User>;
type StatusCount = Record<'active' | 'inactive', number>;

const counts: StatusCount = { active: 10, inactive: 3 };

Union Manipulation

type Status = 'active' | 'inactive' | 'pending' | 'deleted';

type ActiveStatus = Extract<Status, 'active' | 'pending'>;
// = 'active' | 'pending'

type NonDeleted = Exclude<Status, 'deleted'>;
// = 'active' | 'inactive' | 'pending'

type NonNull = NonNullable<string | null | undefined>;
// = string

Function Types

function fetchUser(id: number): Promise<User> { ... }

type FetchReturn = ReturnType<typeof fetchUser>;
// = Promise<User>

type FetchParams = Parameters<typeof fetchUser>;
// = [id: number]

type UnwrappedUser = Awaited<ReturnType<typeof fetchUser>>;
// = User

Template Literal Types

type Color = 'red' | 'blue';
type Size = 'sm' | 'lg';
type Variant = `${Color}-${Size}`;
// = 'red-sm' | 'red-lg' | 'blue-sm' | 'blue-lg'

Need These Tools as an API?

TextForge API offers 20+ developer toolkit endpoints. Free tier: 50 requests/day.

Try TextForge API Free →

Related Tools