Omit<T, Keys>
Omit<T, Keys>は、オブジェクト型TからKeysで指定したプロパティを除いたオブジェクト型を返すユーティリティ型です。
Omit<T, Keys>の型引数#
T#
型引数Tにはオブジェクト型を渡します。
Keys#
Keysには引数Tのプロパティキーを指定します。ここで指定したプロパティキーと一致するプロパティをTから除去します。
Omitの使用例#
typescripttype 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>;
typescripttype 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型は次の型と同じになります。
typescripttype Person = {surname: string;middleName?: string;givenName: string;};
typescripttype Person = {surname: string;middleName?: string;givenName: string;};
Omitの注意点#
Omit<T, Keys>のKeysにTには無いプロパティキーを指定しても、TypeScriptコンパイラーは指摘しません。たとえば、Keysにタイポがあっても検出できないので注意が必要です。
typescripttype 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 ^^ typotype Person = Omit<User, Optional>;// このPersonは下の型になる// {// surname: string,// middleName?: string,// givenName: string,// createdAt: string,// updatedAt: string// }
typescripttype 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 ^^ typotype Person = Omit<User, Optional>;// このPersonは下の型になる// {// surname: string,// middleName?: string,// givenName: string,// createdAt: string,// updatedAt: string// }
UserのcreatedAt,、updatedAtのAtは大文字から始まりますが、これに気づかずに小文字で書いてしまっても、Omitの結果はcreatedAtと updatedAtを含んでしまいます。