TypeScriptの勝利。それによって得られたもの。

論争は終わった。ほとんどの新しいフロントエンドプロジェクトでは、デフォルトでTypeScriptが使われている。採用すべきかどうかを議論する段階はもう過ぎた。

真の価値は、単にタイポ(打ち間違い)を見つけることだけではない。それは、当初の売り文句よりもずっと深いところにある。

型は、決して古びることのないドキュメントを提供する。関数のシグネチャを見れば、そのコードが何を必要とし、何を返すのかが正確にわかる。開発者がUnion型に新しい選択肢を追加すれば、コンパイラがコードのあらゆる箇所を更新するよう強制してくれる。コメントは腐敗するが、型は腐らない。

リファクタリングは、恐ろしい作業から安全な作業へと変わる。型のないコードでは、フィールド名の変更はギャンブルのように感じられる。TypeScriptでは、型を変更すれば、コンパイラが壊れた箇所をすべてリストアップしてくれる。これにより、古いコードに手を加える恐怖がなくなる。

また、型はAIとの作業効率も向上させる。

型のないJavaScriptの編集をAIに依頼すると、AIは構造を推測する。その結果、本番環境のエラーにつながるミスを犯すことがある。TypeScriptでは、型が仕様として機能する。AIはルールを理解している。もしAIがミスをしても、コンパイラが即座に検知する。型は「もっともらしいコード」を「証明されたコード」へと変えるのだ。

型は作業を遅らせるものではない。AIを活用したワークフローにおいては、むしろスピードを上げてくれる。型はガードレールとして機能するため、生成されたコードを一行ずつ手動でチェックすることなく、信頼して進めることができる。

意図を持って型を書く:

• 複数のbooleanの代わりにUnion型を使う。"loading" | "error" | "ready" のようなステータスは、あり得ない状態(impossible states)を防いでくれる。 • ドメイン型に名前をつける。"type Cents = number" とすることで、意図が明確になる。 • "any" を避ける。代わりに "unknown" を使い、型を絞り込む(narrowing)。"any" はセーフティネットを破壊してしまう。 • 型推論を活用する。すべてに型ラベルを付ける必要はない。関数のシグネチャやエクスポートされたAPIには型を付け、それ以外は推論に任せればよい。

TypeScriptは、コードベースを「強制された契約(enforced contracts)」の集合へと変えた。これらの契約によって、恐れを知らないリファクタリングと、信頼できるAIアシスタンスが可能になる。

私たちはバグを防ぐために型を使い始めた。そして、型が他のあらゆるものの基盤であるからこそ、使い続けているのだ。

出典: https://dev.to/parsajiravand/typescript-won-heres-what-that-actually-bought-us-12m8