tamakipedia

フロントエンドエンジニア。Typescriptもう特訓中です。一日の振り返りや学んだことをちょっとずつ吐いています。

【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 !!

参考:
ジェネリクス — 仕事ですぐに使えるTypeScript ドキュメント