Omit<T, Keys>
Omit<T, Keys>
は、オブジェクト型T
からKeys
で指定したプロパティを除いたオブジェクト型を返すユーティリティ型です。
#
Omit<T, Keys>の型引数#
T型引数T
にはオブジェクト型を渡します。
#
KeysKeys
には引数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>
のKeys
にT
には無いプロパティキーを指定しても、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 ^^ typotype 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 ^^ typotype Person = Omit<User, Optional>;// このPersonは下の型になる// {// surname: string,// middleName?: string,// givenName: string,// createdAt: string,// updatedAt: string// }
User
のcreatedAt
,、updatedAt
のAt
は大文字から始まりますが、これに気づかずに小文字で書いてしまっても、Omit
の結果はcreatedAt
と updatedAt
を含んでしまいます。