4.2 関数の型
TypeScriptでは関数も一つの「値」であり、それ自体に 関数型 (function type) と呼ばれる型が存在します。
4.2.1 関数型の記法
Section titled “4.2.1 関数型の記法”関数型は、引数のリストと返り値の型を => でつなげて記述します。
- 基本構文:
(引数名: 型, ...) => 返り値の型 - 例:
const xRepeat: (num: number) => string = (num) => "x".repeat(num); - 引数名の扱い: 型定義に含まれる引数名は、あくまでドキュメント的な役割です。実際の関数の引数名と一致している必要はありません。
4.2.2 返り値の型推論と明示
Section titled “4.2.2 返り値の型推論と明示”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)を持つような特殊なオブジェクトを定義したい場合に利用します。