メインコンテンツまでスキップ

Omit<T, Keys>

Omit<T, Keys>は、オブジェクト型TからKeysで指定したプロパティを除いたオブジェクト型を返すユーティリティ型です。

Omit<T, Keys>の型引数#

T#

型引数Tにはオブジェクト型を渡します。

Keys#

Keysには引数Tのプロパティキーを指定します。ここで指定したプロパティキーと一致するプロパティをTから除去します。

Omitの使用例#

typescript
type User = {
surname: string;
middleName?: string;
givenName: string;
age: number;
address?: string;
nationality: string;
createdAt: string;
updatedAt: string;
};
type Optional = "age" | "address" | "nationality" | "createdAt" | "updatedAt";
type Person = Omit<User, Optional>;
typescript
type User = {
surname: string;
middleName?: string;
givenName: string;
age: number;
address?: string;
nationality: string;
createdAt: string;
updatedAt: string;
};
type Optional = "age" | "address" | "nationality" | "createdAt" | "updatedAt";
type Person = Omit<User, Optional>;

上のPerson型は次の型と同じになります。

typescript
type Person = {
surname: string;
middleName?: string;
givenName: string;
};
typescript
type Person = {
surname: string;
middleName?: string;
givenName: string;
};

Omitの注意点#

Omit<T, Keys>KeysTには無いプロパティキーを指定しても、TypeScriptコンパイラーは指摘しません。たとえば、Keysにタイポがあっても検出できないので注意が必要です。

typescript
type User = {
surname: string;
middleName?: string;
givenName: string;
age: number;
address?: string;
nationality: string;
createdAt: string;
updatedAt: string;
};
type Optional = "createdat" | "updatedat" | "age" | "address" | "nationality";
// ^^ typo ^^ typo
type Person = Omit<User, Optional>;
// このPersonは下の型になる
// {
// surname: string,
// middleName?: string,
// givenName: string,
// createdAt: string,
// updatedAt: string
// }
typescript
type User = {
surname: string;
middleName?: string;
givenName: string;
age: number;
address?: string;
nationality: string;
createdAt: string;
updatedAt: string;
};
type Optional = "createdat" | "updatedat" | "age" | "address" | "nationality";
// ^^ typo ^^ typo
type Person = Omit<User, Optional>;
// このPersonは下の型になる
// {
// surname: string,
// middleName?: string,
// givenName: string,
// createdAt: string,
// updatedAt: string
// }

UsercreatedAt,、updatedAtAtは大文字から始まりますが、これに気づかずに小文字で書いてしまっても、Omitの結果はcreatedAtupdatedAtを含んでしまいます。

関連情報#