TypeScript Omit<T, K> Utility Type Explained

Learn how Omit<T, K> creates a type by removing specific properties. Practical examples for excluding sensitive data, creating DTOs, and base type patterns.

Object Types

Detailed Explanation

Understanding Omit<T, K>

Omit<T, K> constructs a type by picking all properties from T and then removing those whose keys are in K. It is the complement of Pick.

Syntax

type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;

Note that Omit is actually implemented using Pick and Exclude internally.

Basic Example

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

type SafeUser = Omit<User, "password">;
// Equivalent to:
// {
//   id: number;
//   name: string;
//   email: string;
//   role: string;
// }

Practical Pattern: Create vs Update Types

interface Article {
  id: string;
  title: string;
  body: string;
  author: string;
  createdAt: Date;
  updatedAt: Date;
}

// For creating: server generates id and timestamps
type CreateArticle = Omit<Article, "id" | "createdAt" | "updatedAt">;

// For updating: all fields optional except id
type UpdateArticle = Partial<Omit<Article, "id">> & Pick<Article, "id">;

Multiple Omit

You can omit multiple keys by using a union:

type PublicUser = Omit<User, "password" | "role" | "email">;

Caveat: Excess Property Checking

Unlike Pick, Omit does not enforce that the keys actually exist in T. Omitting a key that does not exist produces no error:

type Result = Omit<User, "nonExistent">; // No error!

Use Case

Use Omit<T, K> when you need to exclude sensitive or internal fields from a type, create input types that do not include server-generated fields (id, timestamps), or build derived types that remove specific properties.

Try It — TypeScript Utility Types

Open full tool