【Typescript】extendsを用いてジェネリクスの型パラメータに制約をつける
ジェネリクスで型定義をする際に、特定のプロパティーを持たせるように制限することができる。
引数に存在しないプロパティーがある場合
function showBirthday<T>(person: T): Date { const birthDay = person.getBirthDay(); // personの型は未知なのでgetBirthDay()メソッドがあるかどうか未定でエラーになる return birthDay; } //error : Property 'getBirthDay' does not exist on type 'T'. //TにgetBirthDayなんてプロパティーは存在しません!!
extendを利用して型推論時に「引数に特定のプロパティーが存在する」ように制約をつける
type Person = { getBirthDay(): Date; } function showBirthDay<T extends Person>(person: T): Date { const birthDay = person.getBirthDay(); return birthDay } // ok !!