ここまで、型注釈をほとんど書かずにTypeScriptを使ってきた。今回は、TypeScriptが裏側で何を判断していたのかを見てみよう。

const userName = 'JavaScript';
const score = 80;
const isPassed = true;

文字列、数値、それから条件式のところで出てきた true ですね。

TypeScriptは右側の値から、それぞれを stringnumberboolean だと推論する。型とは、値の種類と、その値にできる操作を表す情報だ。

score.toUpperCase();
// Property 'toUpperCase' does not exist on type 'number'.

実行する前に、その値にはできない操作だと教えてくれるんですね。

そう。型注釈を自分で書くこともできる。ただ、推論できる場所へ毎回書く必要はないよ。

const userName: string = 'JavaScript';
const score: number = 80;
const isPassed: boolean = true;

型注釈が特に役立つのは、前回気になった関数の入口だ。

function add(a: number, b: number) {
  return a + b;
}

add(1, 2);
add('1', '2'); // Argument of type 'string' is not assignable to parameter of type 'number'.

数値を受け取る関数だと、はっきりしました。戻り値の型は書かなくていいんですか?

入口さえ決まれば、a + bnumber になることは推論できる。書いても構わないけれど、まずは推論に任せていい。

この型の情報は、実行するときにも使われるんですか?

いや、型は実行前に消える。実際に動くのは、型注釈を取り除いたJavaScriptだ。

function add(a, b) {
  return a + b;
}

チェックのための情報で、動作そのものは変えないんですね。

そこがTypeScriptの立ち位置だよ。JavaScriptに、開発中だけ働く見張りを足している。

型は暗記するための飾りではなく、値の使い方を人とツールへ伝えるための情報だ。次は、自分たちのデータの形に名前をつけてみよう。