前回の記事では TypeScriptの基本型(string / number / boolean など) を解説しました。
TypeScriptでは型を指定することで安全なコードを書くことができますが、実は すべての変数に型を書く必要はありません。
その理由は 型推論(Type Inference) という仕組みがあるからです。
この記事では次の内容を解説します。
- 型推論とは何か
- 型注釈との違い
- 型推論が行われるケース
- 実務での使い分け
TypeScriptを書く上で非常に重要な概念なので、しっかり理解しておきましょう。
型推論とは
型推論とは
値から型を自動的に判断する仕組み
のことです。
TypeScriptでは、変数の値を見て自動的に型を決定します。
例えば次のコードです。
let age = 20
この場合、TypeScriptは
age: number
と判断します。
つまり次のコードと同じ意味になります。
let age: number = 20
これが 型推論 です。
文字列の型推論
文字列でも同様です。
let name = "Taro"
TypeScriptはこの値を見て
name: string
と判断します。
そのため次のようなコードはエラーになります。
name = 10
TypeScriptは
number は string に代入できない
と判断します。
booleanの型推論
boolean型も同じです。
let isAdmin = true
TypeScriptは
boolean
と推論します。
もし次のように書くと
isAdmin = "yes"
エラーになります。
配列の型推論
配列でも型推論は働きます。
let numbers = [1, 2, 3]
この場合
number[]
と判断されます。
つまり
numbers.push(4)
はOKですが
numbers.push("hello")
はエラーになります。
オブジェクトの型推論
オブジェクトでも型推論が行われます。
let user = {
name: "Taro",
age: 20
}
TypeScriptは次の型を推論します。
{
name: string
age: number
}
そのため
user.age = 21
は問題ありませんが
user.age = "twenty"
はエラーになります。
型推論のメリット
型推論には次のメリットがあります。
コードが短くなる
型を書く必要がないため、コードがシンプルになります。
let count = 10
可読性が高い
型が明確な場合、型を書く必要がありません。
IDE補完が使える
型推論でもIDEは型を理解します。
そのため
- 自動補完
- エラー警告
などが正常に機能します。
型注釈との違い
型注釈とは
型を明示的に書くこと
です。
例
let age: number = 20
一方、型推論は
let age = 20
です。
型推論を使うべきケース
基本的には
型推論を使う
のが一般的です。
理由は
- コードが短くなる
- TypeScriptが自動判断する
ためです。
例えば次のコードです。
let price = 100
これは十分分かりやすいです。
型注釈を使うべきケース
次のような場合は 型注釈を使うべきです。
関数の引数
function add(a: number, b: number) {
return a + b
}
APIデータ
type User = {
name: string
age: number
}
複雑なオブジェクト
型を明示した方が理解しやすくなります。
実務での使い分け
実務では次のように使い分けます。
| ケース | 方法 |
|---|---|
| 単純な変数 | 型推論 |
| 関数引数 | 型注釈 |
| オブジェクト | 型定義 |
| APIデータ | 型定義 |
つまり
基本は型推論
必要な部分だけ型注釈
という考え方です。
型推論の注意点
型推論にも注意点があります。
例えば次のコードです。
let data = null
この場合、TypeScriptは
any
として扱う場合があります。
そのため、型を明確にしたい場合は
let data: string | null = null
のように書くことも重要です。
まとめ
この記事では TypeScriptの型推論 を解説しました。
重要なポイントを整理します。
- 型推論とは値から型を判断する仕組み
- 型を書かなくてもTypeScriptが判断する
- コードがシンプルになる
- 必要な部分では型注釈を使う
TypeScriptでは
型推論 + 型注釈
をバランスよく使うことが重要です。
次の記事
次回は
TypeScriptの関数型
を解説します。
関数の型はTypeScriptで非常に重要で
- 引数
- 戻り値
- Optional引数
- アロー関数
などを詳しく解説します。


コメント