【かたしすてむ】

型システム とは?

最終更新:
💡 値の種類と、できる操作のルール

数値・文字列などの値の種類と、どんな操作や組み合わせを認めるかを扱う規則の体系。実行前に検査する静的な仕組みや、実行時に値の種類を扱う動的な仕組みがある。

📌 このページのポイント
値の種類と、使い方のルールTypeScript実行前に型を検査let x = 42;x = 'hello';型エラーxはnumberと推論JavaScript実行時の値で操作let x = 42;x = 'hello';代入できるx.toFixed() はエラー型検査を通っても、すべてのバグは防げない
同じ代入の例で比較。JavaScriptでは文字列への代入後に数値用のtoFixed()を呼ぶと実行時エラーになる。TypeScriptの型注釈は実行時の入力検証を自動で追加するものではない。
ひよこ ひよこ
型があると何が分かるの?
ペンギン先生 ペンギン先生
たとえば数値に使う操作と文字列に使う操作の違いだよ。TypeScriptなら、数値として扱う変数へ文字列を代入するなど、型に合わない使い方を実行前に指摘できる。型の規則で調べられる問題を早く見つける助けになるんだ。
ひよこ ひよこ
静的と動的はどう違うの?
ペンギン先生 ペンギン先生
TypeScriptの静的な型検査は、実行する前にコードから型の整合性を調べるよ。JavaScriptでは同じ変数に数値の後で文字列を入れられるけれど、その文字列に数値用のtoFixed()を呼べば実行時にエラーになる。動的だから値に種類がない、という意味ではないよ。
ひよこ ひよこ
型推論なら型を書かなくてもいい?
ペンギン先生 ペンギン先生
TypeScriptでlet x = 42;と書くと、xの型をnumberと推論するよ。型を書かなくても型検査は働くので、後でx = 'hello';と書けば型エラーになる。状況によっては明示した方がよいし、letとconstで推論結果が異なる場合もあるんだ。
ひよこ ひよこ
文字列と数値を足したら必ずエラー?
ペンギン先生 ペンギン先生
言語の変換規則によるよ。JavaScriptの1 + '1'は文字列の'11'になるし、TypeScriptでもこの式自体は許される。静的な型検査があることと、自動変換を禁止することは別なんだ。
ひよこ ひよこ
型検査を通ればバグはなくなる?
ペンギン先生 ペンギン先生
なくならないよ。計算の意味が間違っていても型が合うことはあるし、外部から来る値が想定どおりかは別に確かめる必要がある。TypeScriptの型注釈はJavaScriptへ変換すると消え、実行時の検証を自動で追加するわけではないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「型システム」って出てきたら「値の種類と使い方を決めるルール」と思えばだいたいOK!
📖 おまけ:英語の意味
「Type System」 = 型の体系
💬 typeは型・種類、systemは体系という意味だよ。値の種類と操作の規則をまとめて扱う仕組みを表すよ。

参考資料

← 用語集にもどる