【かたすいろん】
型推論 とは?
最終更新:
💡 書かなくても、コンパイラが空気を読んでくれる型付け
型注釈を省略した変数や式などについて、コンパイラや型検査器が初期値・使われ方・文脈から型を求める仕組み。推論できる範囲や規則は言語によって異なる。
📌 このページのポイント
- 初期値や戻り値、周囲の文脈などを手掛かりに型を求める
- TypeScriptやRustなどで使われるが、推論できる場所は言語ごとに異なる
- 推論された型を使って補完や型検査が行われる
- 情報が不足すると型注釈が必要になる。意図した型かの確認も大切
型推論って、型を書かなくていいってこと?
推論できる場所では省略できるよ。TypeScriptなら let x = 42 のxはnumber型になる。型を書いていなくても、その後に文字列を代入すれば型の不一致を検出できるんだ。
じゃあ動的型付けと同じなの?
型注釈を省けることと、いつ型を検査するかは別だよ。TypeScriptやRustでは、実行前に推論した型を使って検査する。実行時の値に応じて操作を扱う動的型付けと、同じ仕組みではないんだ。
どんな情報から推論するの?
初期値や関数の戻り値だけでなく、式が置かれた文脈も使うよ。TypeScriptでは、既知の配列に渡すコールバックの引数などを推論できる。Rustでも値と使われ方から推論するけれど、候補が複数あれば注釈が必要になることがあるんだ。
でも全部推論に任せて大丈夫なのかな?
型が意図と合うかは確認しよう。TypeScriptでは情報不足でanyになる場合があり、十分な型検査ができなくなる。noImplicitAnyで暗黙のanyをエラーにできるよ。公開する関数の戻り値などに注釈を付けると、意図の文書化や変更の検知にも役立つね。
まとめ:ざっくりこれだけ覚えればOK!
「型推論」って出てきたら「コンパイラが型を自動で察してくれる機能」と思えればだいたいOK!
📖 おまけ:英語の意味
「Type Inference」 = 型の推論
💬 Infer は「推測する」という意味で、コンパイラがコードの文脈から型を推測するイメージだよ