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.


If you read this far, tweet to the author to show them you care. Tweet a Thanks
0 votes
0 votes
0 votes

More Posts

Automate GitHub like a pro: Build your own bot with TypeScript and Serverless

Alwil17 - Jul 21

Unlocking Web Performance: A Deep Dive into the Three Types of Web Workers

Sunny - Oct 15

How to set up TypeScript with Node.js and Express (2025)

Sunny - Jun 6

TypeScript vs Zod

Sunny - May 29

Express and TypeScript: How to Set Up Your Project

Mubaraq Yusuf - May 26
chevron_left