TypeScriptはJavaScriptの上に構築されたもので、静的(厳格な)型付けを実現しています。これは、型のチェックがコンパイル時に行われ、JavaScriptのように実行時に行われないことを意味します。
主な違い:
大規模プロジェクトでの利点:
例:
type User = { name: string; age: number; } function greet(user: User): string { return 'Hello, ' + user.name; } const u: User = { name: 'Ivan', age: 30 }; greet(u); // OK
質問: TypeScriptのプロジェクトでany型の変数を宣言できますか、そしてプロジェクトの厳格な型付けの利点を失いますか?
回答:
はい、TypeScriptはany型の使用を許可しており、これはその変数に対して型付けがないのと同等です。anyを頻繁に使用すると、TypeScriptの主な利点である厳格な型付けが無効になり、JavaScriptと同様の実行時エラーのリスクが生じます。
例:
let data: any = 'test'; data = 42; // エラーは発生しませんが、問題を引き起こす可能性があります
物語
開発者は複雑なオブジェクトのために
any型を頻繁に使用し、「早く進める」ために利用しました。その結果、ある日、必要なフィールドが欠けたオブジェクトが届き、アプリケーションが突如としてクラッシュしました。型のチェックがないため、エラーは本番環境にそのまま入ってしまいました。
物語
大規模なプロジェクトで、二つの異なるマイクロサービス間でメッセージを交換していました。あるサービスがオブジェクトの構造を変更しましたが、TypeScriptは型が明示的に
anyとして設定されていたため、警告しませんでした。バグはユーザからの苦情を受けてから1ヶ月後に発見されました。
物語
若い開発者が公開関数の戻り値の型を記述せず、型の自動推論に依存していました。リファクタリングの後、その側で型の期待が機能しなくなり、プロジェクト全体にバグの連鎖が発生しました。