Programmingフロントエンド開発者

TypeScriptがJavaScriptと比較して厳格な型付けをどのように実現しているか説明してください。主な違いは何ですか?この機能は大規模プロジェクトでどのような利点をもたらしますか?

Hintsage AIアシスタントで面接を突破

回答。

TypeScriptはJavaScriptの上に構築されたもので、静的(厳格な)型付けを実現しています。これは、型のチェックがコンパイル時に行われ、JavaScriptのように実行時に行われないことを意味します。

主な違い:

  • 静的型チェック: 変数、関数のパラメータ、戻り値を明示的に記述できます。
  • デフォルト型(型推論): 代入される値に基づいて変数の型を暗黙的に決定します。
  • APIの統一: IDEやコード分析ツールは型を表示したり、フィールドを自動補完したり、エラーを警告したりできます。

大規模プロジェクトでの利点:

  • 統一された基準、バグが少ない。
  • リファクタリングがより迅速かつ安全に行えます。
  • チームワークが容易になる。

例:

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ヶ月後に発見されました。


物語

若い開発者が公開関数の戻り値の型を記述せず、型の自動推論に依存していました。リファクタリングの後、その側で型の期待が機能しなくなり、プロジェクト全体にバグの連鎖が発生しました。