TypeScript Omit<T, K>ユーティリティ型の解説

Omit<T, K>が特定のプロパティを除外して型を作成する方法を学びます。機密データの除外、DTO作成、ベース型パターンの実践的な例を紹介します。

Object Types

詳細な説明

Omit<T, K>の理解

Omit<T, K>Tからすべてのプロパティを選択し、キーがKに含まれるものを除外して型を構築します。Pickの補完型です。

構文

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

Omitは内部的にPickExcludeを使用して実装されていることに注目してください。

基本的な例

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

type SafeUser = Omit<User, "password">;
// 以下と同等:
// {
//   id: number;
//   name: string;
//   email: string;
//   role: string;
// }

実践パターン: 作成 vs 更新の型

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

// 作成時: サーバーがidとタイムスタンプを生成
type CreateArticle = Omit<Article, "id" | "createdAt" | "updatedAt">;

// 更新時: id以外すべてオプショナル
type UpdateArticle = Partial<Omit<Article, "id">> & Pick<Article, "id">;

複数のOmit

ユニオンを使って複数のキーを除外できます:

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

注意事項: Excess Property Checking

Pickとは異なり、Omitはキーが実際にTに存在するかを強制しません。存在しないキーを除外してもエラーになりません:

type Result = Omit<User, "nonExistent">; // エラーなし!

ユースケース

Omit<T, K>は機密フィールドや内部フィールドを型から除外する場合、サーバー生成フィールド(id、タイムスタンプ)を含まない入力型の作成、特定のプロパティを除外した派生型の構築に使用します。

試してみる — TypeScript Utility Types

フルツールを開く