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は内部的にPickとExcludeを使用して実装されていることに注目してください。
基本的な例
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、タイムスタンプ)を含まない入力型の作成、特定のプロパティを除外した派生型の構築に使用します。