私がTypeScriptを売り込む方法(セールスピッチ)
(2ality.com)- TypeScriptはJavaScriptに型情報を追加した言語
- JSエンジンで実行される前に型情報が取り除かれる → つまり、作成および配布の過程で追加作業が必要
- その追加作業には価値があるのか? → 十分に価値がある
自動補完とコード編集中のエラー検出
- TypeScriptはコード作成時に自動補完とエラー検出を提供
- 例1: タイポ、誤った型、引数の不足
- 存在しないプロパティにアクセスするとエラー表示。自動補完にも出てこない
- 誤った型のメソッドを呼び出すとエラー表示
- 必須の引数が欠けている場合はエラー表示
- 誤った型の引数を渡した場合はエラー表示
- 例2: 関数の戻り値エラー
- 戻り値が定義された型と一致しない場合はエラー表示
- 例えば、戻り値が
string[]なのに戻り値型がstringと定義されている場合にエラーが発生
- 例3: オプショナルプロパティ処理のエラー
- オプショナルプロパティを戻り値として使う際、型が一致しないとエラー表示
- 例4: switch文でcaseが欠けている
- switch文のすべてのcaseが処理されていないとエラー発生
- 残りの値が
never型であるべきという要件に違反するとエラー発生
- 例5: コード内で特定ケースを処理する際のエラー
- 特定の値に応じて分岐処理する際、誤ったケースでエラー発生
- 例えば、特定のオブジェクト型に存在しないプロパティへアクセスするとエラー発生
関数のパラメータと戻り値の型を明示する → 優れたドキュメント化の役割
- TypeScriptでは関数のパラメータ型と戻り値型を明示できる
- コードの理解しやすさと保守性が向上
- 関数の引数と戻り値がどの型なのかが明確に分かる
コードリファクタリングの強化
- TypeScriptはコードリファクタリングをより安全に行えるよう支援する
- メソッド名を変更すると、関連するすべてのコードにも安全に反映される
- コードのつながりを正確に把握できる
TypeScriptの利用はより簡単になっている
- TypeScriptの実行とコンパイルは簡単になっている
- Node.js、Deno、Bunのようなプラットフォームで直接TypeScriptを実行可能
- ViteのようなバンドラはTypeScriptを標準でサポート
- 型除去(type stripping)手法の導入 → 型情報だけを取り除き、ほかの変換は行わない
- npmパッケージの配布も改善 → JavaScriptと型宣言ファイルの自動生成をサポート
TypeScriptの欠点
- 学習コストがある → JavaScriptより複雑
- 一部のnpmパッケージでは型定義がなかったり誤っていたりして問題が起きる可能性がある
tsconfig.jsonの設定が複雑になることがある- できるだけ厳格な設定にすると問題を緩和できる
- 型除去が明確になったことで
tsconfig.jsonの役割は単純化されつつある
TypeScript FAQ
TypeScriptのコードは重くならないか?
- TypeScriptは型推論により、最小限の型定義でもコードを書ける
- 複雑な型注釈がなくても十分に有用に動作する
TypeScriptはJavaScriptをC#やJavaに変えようとしているのか?
- 初期にはJavaScriptに不足していた機能を補うため、クラス、モジュール、列挙型などを追加していた
- 現在はECMAScript標準に合わせてTypeScriptを改善している
- JavaScriptにない機能はTypeScriptにも追加されない
TypeScriptはオブジェクト指向プログラミング(OOP)だけを支援するのか?
- TypeScriptは関数型プログラミングのパターンもよくサポートしている
- 例えば、
discriminated unionは関数型プログラミングでよく使われる
複雑な型定義は必ず学ぶ必要があるのか?
- ほとんどのTypeScript利用ではシンプルな型定義で十分
- 複雑な型定義はライブラリ作成時には有用だが、一般的な利用では不要
TypeScriptの習得にはどれくらいかかるのか?
- 基本概念は1日で学べる
- シンプルなコード作成とデバッグは翌日から可能
- 徐々に複雑な型や高度な機能を学んでいける
4件のコメント
強い型付けには利点があります。C++でも同様です。
JavaScript->TypeScript を使うと、目を閉じて開発していた状態から目が開いたような感覚。型がもたらす安心感と自動補完、Copilot との組み合わせ
うちの会社のチームは「JavaScriptで十分だ」と言ってプロジェクトを進めていましたが、今ではすべてTypeScriptに移行しています。
JavaScriptを置き換えるのではなく補完するもの、この点こそがTypeScriptがDartに勝った成功要因のように思います。本当に学んでよかったと感じます。