Skip to content

TypeScript 過剰プロパティチェック

 TypeScriptでは、オブジェクトリテラルで生成されたオブジェクトを特定の型が注釈された変数に代入する際、その型に定義されていない余分なプロパティがオブジェクトに存在するとエラーが報告される。この機能は過剰プロパティチェックと呼ばれる。

ts
type Person = {
  name: string
  age: number
}

const john: Person = {
  name: 'John',
  age: 25,
}

const alice: Person = {
  name: 'Alice',
  age: 25,
  // gender: 'female', // Person型にはgenderプロパティが存在しないためエラー
}

 変数aliceに代入されているオブジェクトが型定義にないgenderプロパティを持っているため、TypeScriptはエラーを報告する。

 ただし、過剰プロパティチェックは「オブジェクトリテラルで生成したオブジェクトを直接変数に代入する場合」にのみ適応されることに注意。別の変数に割り当てられたオブジェクトを経由すると、このチェックは行われない。

ts
const daniel = {
  name: 'Daniel',
  age: 30,
  gender: 'male',
}

const danielAsPerson: Person = daniel // OK

 オブジェクトリテラルで生成されたオブジェクトではなく、別の変数に代入されている既存のオブジェクトを別の変数に代入する際には、過剰プロパティチェックは、発動しない。過剰プロパティチェックが動作するのは、オブジェクトリテラルで生成されたオブジェクトが直接型注釈付きの変数に代入される場合のみである点に注意。