TypeScript入門 ・ Chapter 16

関数の型

記事 ・ 冒頭を無料公開中

引数と戻り値に注釈を書く。それは最初の章からやってきました。この章はその先です。関数そのものを型として書く。これができると、「関数を受け取る関数」「関数を入れる変数」に型がつけられるようになり、mapやfilterの中で起きていたことの種明かしもつきます。

関数型

関数の形は、"(引数) => 戻り値" の形で型として書けます。

type Calculator = (a: number, b: number) => number;

const add: Calculator = (a, b) => a + b;
const multiply: Calculator = (a, b) => a * b;

"Calculator" は「numberを2つ受けてnumberを返す関数」という関数の型です。注目してほしいのは、addとmultiplyの実装で引数に型注釈を書いていないこと。変数側に ": Calculator" と宣言したので、TypeScriptが「aとbはnumberだ」と逆算してくれます(文脈からの推論)。型を一箇所に書けば、実装側は身軽になる、というわけです。

読み方の注意をひとつ。アロー関数の実装と関数型は、同じ "=>" を使うので初見は混乱します:

//        ↓これは「型」の中の =>(戻り値の型を指す)
type Fn = (n: number) => string;

//            ↓これは「実装」の =>(処理本体を指す)
const fn: Fn = (n) => `No.${n}`;

「型の中の => は戻り値、実装の => は本体」。この区別がつけば、関数型は読めたも同然です。

コールバックの型

関数型の一番の使いどころは、引数として関数を受け取るときです。

このチャプターの続きは受講生限定です

本文の残り、図解・実行できるコードブロック・演習はプラン加入後に読めます。

料金プランを見る