CHAPTER 6 · 4 LESSONS · 52 問

型を使い回す

`Array<string>` の山かっこを読めるようになり、型そのものを引数として渡す書き方を知ろう。

他人のコードを読んでいると、Array<string>Promise<number> のような山かっこに出会う。これが読めないと、フレームワークの入門ドキュメントの1行目で止まってしまうよ。この章はそこを越えるための短い章だ。

結論から言うと、山かっこの中身は「型に渡す引数」だ。関数がかっこの中に値を受け取るように、型も山かっこの中に型を受け取ることがある。Array<string> は「文字列を入れる配列」という意味で、じつは string[] とまったく同じものだよ。同じものに書き方が2つある、というだけだ。

こう考えると読めるようになる。Array は「配列という型を作る道具」で、<string> を渡すと「文字列の配列」という型ができあがる。渡すものを <number> に変えれば、数値の配列になる。型を作る型、と言ってもいい。この仕組みをジェネリクスと呼ぶ。

読めるようになったら、次は少しだけ書いてみる。「配列を受け取って、最初の1件を返す関数」を作りたいとしよう。文字列の配列にも数値の配列にも使いたい。string[] と書くと文字列にしか使えないし、any[] と書くと戻り値の型が分からなくなってしまう。

ここで使うのが型引数だ。関数名のうしろに <T> と書いておくと、「中身の型は呼ぶ人が決める」という意味になる。T は呼ばれたときに実際の型に置きかわるので、string[] を渡せば戻り値は stringnumber[] を渡せば number になる。1回書いた関数が、型を保ったまま何にでも使えるようになるんだ。

ジェネリクスにはもっと深いところがあるけれど、入門でそこへ踏み込む必要はない。読めることと、簡単なものを1つ書けること。この2つがあれば、他人のコードで詰まらなくなる。

つづいて、型をファイルの外へ渡す話をする。JavaScript コースで exportimport を覚えたね。あれは型にも効くんだ。型の定義を1つのファイルにまとめておいて、使う側から取り込む。このとき import type と書くと「これは型だけを持ってくる指定だ」とはっきりする。型は実行前に消えるから、その行は変換後のコードから丸ごと消えてなくなるよ。実際のプロジェクトでは、型をまとめたファイルが1つあって、あちこちからそれを取り込む形になっていることが多い。

そして章の最後は読み物だ。ここまでで、自分のコードに型を書くのに必要なものはひととおりそろっている。でも他人のコードには、まだ見せていない書き方も出てくる。enum、タプル型、交差型、ユーティリティ型、抽象クラスと static。ぜんぶを使いこなす必要はないけれど、見かけたときに何なのか分かるようにしておくと、その先で止まらずに済む。だから最後の1本は、それらを短く紹介するだけの回にしてある。

ここがコースの最後だよ。ここまで来たら、: string を見て身構えることはもう無い。型は書いたコードを縛るものではなく、まちがえたときにいちばん早く教えてくれる相棒だ。

この章のレッスン

山かっこを読む・書く

  1. 27山かっこを読むArray<string> の山かっこを読めるようになって、string[] と同じものだと分かろう。 問題へ
  2. 28型引数を書く関数関数名のうしろに <T> と書いて、どんな型の配列にも使える関数を1つだけ作ろう。 問題へ

型をファイルの外へ渡す

  1. 29型をファイルの外へ渡すexport type で型を出して、import type で受け取る。型もファイルをまたいで使い回そう。 問題へ

この先で出会う書き方

  1. 30この先で出会う書き方このコースでは扱わない5つの書き方を、読めるだけのぞいておこう。 問題へ

これがこのコースの最後の章。