TypeScript
TypeScriptを使用する理由と時期
サーチ…
前書き
一般的に説得力のある型システムの引数を見つけたら、TypeScriptがうまくいくでしょう。
これは、タイプシステム(安全性、可読性、改善されたツール)の多くの利点をJavaScriptエコシステムにもたらします。また、タイプシステムの欠点のいくつか(複雑さと不完全さが増している)に苦しんでいます。
備考
型付き言語と型なし言語のメリットは何十年も議論されてきました。静的型の引数には、次のものがあります。
- 安全性:タイプシステムは、コードを実行することなく、多くのエラーを早期に捕らえることができます。 TypeScriptは、プログラミングエラーを少なくするように構成することができます
- 可読性:明示的な型は、コードを人間が理解しやすくします。フレッド・ブルックスは次のように書いています。「あなたのフローチャートを見せてテーブルを隠すと、私は引き続き謎に遭うでしょう。テーブルを見せて、通常はフローチャートは必要ありません。
- ツーリング:タイプシステムは、コンピュータが理解しやすいようにコードを作成します。これにより、IDEやリンターのようなツールをより強力にすることができます。
- パフォーマンス:タイプ・システムは、ランタイム・タイプ・チェックの必要性を減らすことによって、コード実行を高速化します。
TypeScriptの出力は型に依存しないため、TypeScriptはパフォーマンスに影響を与えません。 TypeScriptを使用するための引数には、他の3つの利点があります。
型システムに対する引数は次のとおりです。
- 複雑さが増しました:タイプシステムは、記述されている言語ランタイムよりも複雑になります。高次関数は正しく実装するのは簡単ですが入力は難しいです。型定義を扱うことで、外部ライブラリを使用することにさらなる障害が生じます。
- 追加の冗長性:型の注釈は、定型ロジックをコードに追加することができます。
- 遅い反復:ビルドステップを導入することによって、TypeScriptは編集/保存/リロードのサイクルを遅くします。
- 不完全性:型システムは健全で完全なものではありません。 TypeScriptが許さない正しいプログラムがあります。また、TypeScriptが受け入れるプログラムにはまだバグが含まれている可能性があります。タイプシステムはテストの必要性を軽減しません。 TypeScriptを使用する場合は、新しいECMAScript言語機能を使用するのに時間がかかることがあります。
TypeScriptは、これらの問題に対処するいくつかの方法を提供します:
- 複雑さが増しました。プログラムの型入力が難しい場合は、不透明
any
型を使用してTypeScriptを大部分が無効にすることができます。外部モジュールについても同様です。 - 冗長表示を追加しました。これは、タイプエイリアスとタイプを推論するTypeScriptの能力によって部分的に対処することができます。明確なコードを書くことは、科学と同じくらい芸術です。タイプアノテーションをあまりにも多く取り除くと、コードは人間の読者にとってはもはやはっきりしないことがあります。
- 遅い反復:現代のJS開発ではビルドステップが比較的一般的であり、TypeScript はほとんどのビルドツールと既に統合されています 。また、TypeScriptがエラーを早期にキャッチすると、繰り返しサイクル全体を節約できます!
- 不完全さ。この問題を完全に解決することはできませんが、TypeScriptは時間の経過とともにますます表現力豊かなJavaScriptパターンをキャプチャできました。最近の例には、 TypeScript 2.1のマップされた型と2.2のミックスインが追加されています 。
型システムに対する引数と型に対する引数は、一般にTypeScriptにも同様に適用されます。 TypeScriptを使用すると、新しいプロジェクトを開始するためのオーバーヘッドが増加します。しかし、時間が経つにつれて、プロジェクトの規模が拡大し、寄稿者が増えるにつれて、それを使う賛成(安全性、可読性、ツーリング)が強くなり、短所を上回ることが期待されます。これは、TypeScriptのモットーに反映されています。
安全性
TypeScriptは静的解析の初期段階で型エラーをキャッチします:
function double(x: number): number {
return 2 * x;
}
double('2');
// ~~~ Argument of type '"2"' is not assignable to parameter of type 'number'.
可読性
TypeScriptを使用すると、エディタはコンテキスト・ドキュメントを提供できます。
String.prototype.slice
が(start, stop)
か(start, length)
もう一度取るかどうか決して忘れることはありません!
ツーリング
TypeScriptを使用すると、言語の規則を認識している自動リファクタを編集者が実行できます。
例えば、Visual Studio Codeでは、外側のfoo
を変更することなく内側のfoo
への参照の名前を変更できます。これは簡単な検索/置換では困難です。