TypeScriptのOmitを解説

typescript

本記事では、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">; // エラー: サポートされない
タイトルとURLをコピーしました