この動画はメンバー限定動画です
全ての講座が
月額990円で学び放題
TypeScriptでは、変数や定数の宣言に型の宣言が必要と紹介しましたが、実は省略することも可能です。「type.ts」というファイルで、次のようなプログラムを作成してみましょう。
let tax = 1.1;
console.log(500 * tax);
これでも正しく動作します。実はこの時、TypeScriptは自動的に型を判断しています。マウスカーソルを変数名に重ねると「number」であると判断しています。
![](https://tomosta.jp/wp-content/uploads/2024/05/image-43-1024x576.png)
では今度は、次のように文字列を代入してみましょう。
let tax = '10%';
すると今度は、「string」であると判断します。
![](https://tomosta.jp/wp-content/uploads/2024/05/image-44-1024x576.png)
このように代入された値の型で、変数の型が自動的に判断されます。これを「型推論」といいます。
別のデータ型を代入してみよう
型推論があれば、JavaScriptと同じようにプログラムを作成できるのかと言えば、実は少し違いがあり、この変数に別の「型」の値を代入しようとする時に違いが分かります。次のように変更しましょう。
let tax = 1.1;
tax = '15%';
console.log(500 * tax);
すると、先と同様のエラーになります。
![](https://tomosta.jp/wp-content/uploads/2024/05/image-45-1024x576.png)
型を宣言していないにも関わらず、文字列は代入できなくなりました。
JavaScriptの場合は、この場合代入された時点で文字列型に変化します。しかし、TypeScriptは最初に代入された値の型で、データ型を確定させてしまうため、それ以降他の型は代入できません。こうして、安全性を保っています。
何でも代入できるany型
プログラムの内容によってはどうしても変数の内容に、別の型の値が後から代入されてしまうというケースはあります。特に、過去に作ったプログラムなどをTypeScriptに移植したいという場合には、どうしても型を決められない場合があります。
そんな時は「any型」という特別な型を使うことができます。これは、型を定めず何でも代入できるという便利な型です。次のように宣言しましょう。
let tax: any = 1.1;
tax = '15%';
console.log(500 * tax);
すると、エラーが出なくなります。
![](https://tomosta.jp/wp-content/uploads/2024/05/image-46-1024x576.png)
また、変数を宣言するときに型の宣言も、値の代入もなかった場合も、any型になります。
let tax;
tax = 10;
tax = "消費税は10%です";
console.log(500 * tax);
こうして、後から別の型の変数を代入することができます。
とはいえ、any型は便利な半面、プログラムの内容が信頼できなくなってしまい危険です。実際、このサンプルプログラムも、結局動作するときに正しく動作せず、異常の発見が遅くなるだけです。
特別な事情がなければ、any型は使わず、正しく型を定義した方が良いでしょう。