Skip to content

4.2 関数の型

TypeScriptでは関数も一つの「値」であり、それ自体に 関数型 (function type) と呼ばれる型が存在します。

関数型は、引数のリストと返り値の型を => でつなげて記述します。

  • 基本構文: (引数名: 型, ...) => 返り値の型
  • : const xRepeat: (num: number) => string = (num) => "x".repeat(num);
  • 引数名の扱い: 型定義に含まれる引数名は、あくまでドキュメント的な役割です。実際の関数の引数名と一致している必要はありません。

TypeScriptは関数の本体から返り値の型を自動的に推論できます。

  • 省略可能: 多くの場合、返り値の型注釈は省略しても安全に推論されます。
  • 明示するメリット: 複雑な関数では、返り値を明示することで「実装ミスによる意図しない型推論」をコンパイルエラーとして検出できるため、基本的には明示することが推奨されます。

4.2.3 引数の型注釈が省略可能な場合

Section titled “4.2.3 引数の型注釈が省略可能な場合”

通常、関数の引数には型注釈が必須ですが、逆方向の型推論 (contextual typing) が働く場合は省略可能です。

  • 条件: 変数の型があらかじめ関数型として定義されている場所に、直接関数(アロー関数など)を代入する場合などが該当します。
  • 実用例: array.filter() のコールバック関数の引数などは、配列の要素型から自動的に推論されます。

4.2.4 コールシグネチャによる関数型の表現

Section titled “4.2.4 コールシグネチャによる関数型の表現”

関数はオブジェクトの一種であるため、オブジェクト型の構文({})の中で関数としての挙動を定義することもできます。これを コールシグネチャ (call signature) と呼びます。

  • 構文: { (引数リスト): 返り値の型; }
  • 用途: 関数としての機能に加えて、独自のプロパティ(例:double.isUsed = true)を持つような特殊なオブジェクトを定義したい場合に利用します。