Deep Dive into TypeScript Utility Types: `Omit`, `Exclude`, `Extract`, `NonNullable`, `Parameters`

Leader posted 2 min read

TypeScript’s utility types give you powerful ways to transform and manipulate existing types. If you’ve already used types like Partial or Pick, it’s time to expand your toolbox.

In this article, we'll focus on five highly useful utility types:

  • Omit<Type, Keys>
  • Exclude<UnionType, ExcludedMembers>
  • Extract<UnionType, IncludedMembers>
  • NonNullable<Type>
  • Parameters<Type>

1. Omit<Type, Keys>

Omit creates a new type by removing specified keys from another type.

Example

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

type UserWithoutEmail = Omit<User, 'email'>;

// Result:
type UserWithoutEmail = {
  id: number;
  name: string;
}

Use Case

Perfect when you need to reuse most of a type but exclude a few fields—for example, when hiding sensitive information.


2. Exclude<UnionType, ExcludedMembers>

Exclude removes members of a union that are assignable to another type.

Example

type Roles = 'admin' | 'user' | 'guest';

type NonGuest = Exclude<Roles, 'guest'>;
// Result: 'admin' | 'user'

Use Case

Useful when you want to filter out specific options from a union.


3. Extract<UnionType, IncludedMembers>

Extract is the opposite of Exclude. It keeps only the members that are assignable to another type.

Example

type Events = 'click' | 'hover' | 'scroll';

type UIEvents = Extract<Events, 'click' | 'hover'>;
// Result: 'click' | 'hover'

Use Case

Helpful when you want to narrow a union type to only valid choices.


4. NonNullable<Type>

NonNullable removes null and undefined from a type.

Example

type MaybeUser = User | null | undefined;

type DefinedUser = NonNullable<MaybeUser>;
// Result: User

Use Case

Great when you want to ensure a type is fully usable, for example, after a null-check.


5. Parameters<Type>

Parameters extracts the tuple of parameter types from a function type.

Example

function createUser(id: number, name: string): User {
  return { id, name };
}

type Args = Parameters<typeof createUser>;
// Result: [id: number, name: string]

Use Case

Useful for reusing or forwarding function arguments dynamically.


Summary Table

Utility Type What It Does
Omit<T, K> Removes keys K from type T
Exclude<T, U> Removes members of union T that are assignable to U
Extract<T, U> Keeps only members of union T that are assignable to U
NonNullable<T> Removes null and undefined from type T
Parameters<T> Extracts argument types of function T as a tuple

Wrapping Up

These utility types are essential when writing scalable TypeScript code. They allow you to:

  • Create flexible APIs
  • Simplify code reuse
  • Ensure type safety in transformations

By mastering them, you'll write more expressive and maintainable code.


0 votes
0 votes
0 votes

More Posts

TypeScript Complexity Has Finally Reached the Point of Total Absurdity

Karol Modelskiverified - Apr 23

Your Tech Stack Isn’t Your Ceiling. Your Story Is

Karol Modelskiverified - Apr 9

I’m a Senior Dev and I’ve Forgotten How to Think Without a Prompt

Karol Modelskiverified - Mar 19

Merancang Backend Bisnis ISP: API Pelanggan, Paket Internet, Invoice, dan Tiket Support

Masbadar - Mar 13

Tuesday Coding Tip 02 - Template with type-specific API

Jakub Neruda - Mar 10
chevron_left

Commenters (This Week)

2 comments
1 comment

Contribute meaningful comments to climb the leaderboard and earn badges!