本記事では、TypeScriptのユーティリティ型のひとつであるOmit
について解説します。
Omit
を使用することで、既存の型から不要なプロパティを簡単に取り除き、目的に応じた型を効率よく作成できます。
Omit<T,K>
Omit<T, K>
は、指定した型 (T
) から特定のプロパティ (K
) を取り除いた新しい型を作成するユーティリティ型です。
interface User {
id: number; // ユーザーID
name: string; // 名前
email: string; // メールアドレス
password: string; // パスワード
};
type PublicUser = Omit<User, "password">;
/*
PubicUserは以下と同じです。
type PublicUser = {
id: number; // ユーザーID
name: string; // 名前
email: string; // メールアドレス
};
*/
const publicUser: PublicUser = {
id: 1,
name: "John Doe",
email: "john.doe@example.com",
};
既存の型を利用しつつも、一部の不要なプロパティを削除できます。
また、一度に複数のプロパティを削除できます。
interface User {
id: number; // ユーザーID
name: string; // 名前
email: string; // メールアドレス
password: string; // パスワード
};
type SimpleUser = Omit<User, "email" | "password">;
/*
SimpleUserは以下と同じです。
type SimpleUser = {
id: number; // ユーザーID
name: string; // 名前
};
*/
const simpleUser: SimpleUser = {
id: 1,
name: "John Doe",
};
Omitを使用する際の注意点
存在しないキーを指定するとエラーになる
K
に指定するキーは、T
型のプロパティである必要があります。それ以外を指定するとコンパイルエラーになります。
interface User {
id: number;
name: string;
email: string;
}
// 存在しないプロパティを指定
type InvalidOmit = Omit<User, "password">; // エラー: 型 'User' に 'password' が存在しません
ネストされたオブジェクトのプロパティには非対応
Omit
は浅いプロパティのみを除外します。ネストされたオブジェクトのプロパティを除外する場合、カスタム型が必要になります。
interface User {
id: number;
name: string;
profile: {
age: number;
address: string;
};
}
// `profile.address` を除外したい場合
type WithoutAddress = Omit<User, "profile.address">; // エラー: サポートされない