ReactでTypeScriptを導入する事が多いと思うので、TypeScriptがJavaScriptの型
をどう扱うかを調べてみました。
TypeScript は JavaScript に対して「静的型付け」という仕組みを導入しています。つまり、
コンパイル時に型のチェックを行い、開発者が指定した型に基づいて型安全性を保証します。
これにより、開発中に型に関するエラーを検出しやすくなり、コードの安全性や信頼性を
向上させることができます。
JavaScript の弱い型付け
JavaScript は「弱い型付け(ダック・タイピング)」と「動的型付け(実行時型チェック)」
の言語です。これにはいくつかの特徴があります。
・型の自動変換(暗黙的な型変換)
JavaScript では、異なる型同士の操作で暗黙的に型が変換されることがよくあります。
例えば、数値と文字列を連結すると文字列に自動的に変換されます。
let x = 5 + "5"; // "55" (数値 5 と文字列 "5" を連結)
・実行時に型が決まる
JavaScript は実行時に変数の型が決定されるため、型のチェックが事前に行われず、
型に関するエラーが実行時にしか発生しません。
TypeScript の静的型付け
TypeScript は、JavaScript に「静的型付け(Static Typing)」を導入します。
これにより、コンパイル時に型チェックが行われ、誤った型の使い方を防ぎます。
・型注釈による明示的な型指定
TypeScript では、変数や関数に型注釈を追加して、その型が守られるようにします。
let x: number = 5; // x は number 型
x = "Hello"; // エラー: string型はnumber型に代入できない
ここでは、x に数値型を指定しているため、後から string 型を代入しようとすると
コンパイル時にエラーが発生します。
・型推論
TypeScript は、型を明示的に指定しなくても、多くの場合自動的に型を推論します。
これにより、型安全であることが保証されます。
let y = 10; // TypeScript は y が number 型だと推論
y = "Hello"; // エラー: string型はnumber型に代入できない
・コンパイル時のエラー検出
TypeScript はコードを実行する前に型チェックを行うため、実行時に発生しうる多くの
型エラーを開発中に発見できます。
TypeScript の型付けは「強い型付け」か?
「強い型付け」とは、型の変換が厳密であり、異なる型同士を無条件で自動的に変換しない
性質を指します。JavaScript は「弱い型付け」で、異なる型同士を自動で変換しますが、
TypeScript はそのような動作を制限し、より厳密な型チェックを行います。
ただし、TypeScript が完全に「強い型付け」に変わるわけではありません。
以下の理由で、TypeScript はあくまで JavaScript の型付けを補完するものです。
1.型安全性はコンパイル時だけ
TypeScript の型チェックはコンパイル時に行われ、実行時には JavaScript に変換されます。
実行時には型情報はすべて削除されているため、実行時の型チェックは依然として行われません。
2.暗黙的な型変換は依然可能
TypeScript でも、JavaScript の暗黙的な型変換の動作を完全に排除するわけではありません。
例えば、数値と文字列を加算すると、暗黙的に文字列に変換される動作はそのままです。
let x: number = 10;
let y: string = " apples";
let result = x + y; // "10 apples"
3.any 型や型の緩和が可能
TypeScript には any 型があり、この型を使うと、JavaScript と同様に動的に型が決まる
コードを書くことができます。このため、TypeScript でも型安全性を意図的に
弱めることが可能です。
let value: any = 5; // any型なのでどんな値でも代入可能
value = "Hello"; // OK
まとめ: TypeScript の型付けの役割
- 静的型付け: TypeScript は コンパイル時に型をチェックすることで、JavaScript の
動的型付けに対する安全性を追加します。これは、開発中のバグを防ぐのに非常に
効果的です。 - 弱い型付けを強い型付けに「変える」わけではない: TypeScript は JavaScript の
柔軟性(弱い型付け)の上に、静的な型のチェックを加えたものであり、
JavaScript が持つ動的型付けや暗黙の型変換の動作を完全に排除するわけではありません。 - より型安全な開発をサポート: TypeScript を使うことで、開発者は意図しない型エラーを
減らし、型の矛盾を早期に発見できますが、実行時には依然として JavaScript と同じく
動的型付けの仕組みが働きます。
したがって、TypeScript は JavaScript に型安全性を追加する一方で、JavaScript の
動的型付けの柔軟性を失わずに使えるようになっています。

