ネイティブJavaScriptとTypeScriptの違いは何ですか?
ブラウザはJavaScript以外の言語をサポートしていません。 したがって、すべての言語はJavaScriptでコンパイルされます。 いくつかの問題の前に、ラッパーについて話したことを覚えていますか? そのため、言語は、ある種の機能に対するより便利なラッパーです。 異なる言語は異なる可能性を提供します。多くの場合、モジュール性、タイピング、または他のプログラミングパラダイムの機能に帰着します。 例:
- Dartはモジュール性と類型化を提供します。
- Elm-関数型プログラミングとタイピング。
- Clojureは単なる関数型プログラミングです。
- CoffeeScript 、うーん...
CoffeeScriptを発明した人たちは神に許されましたが、彼らは自分たちが何をしていたのかを知りませんでした。 ただし、そこからの矢印関数はJavaScriptに入りました。 ただし、CoffeeScriptが登場するずっと前から、 class
とextends
という言葉は言語で予約されていたため、クラスのラッパーではありません。
次に、TypeScriptが提供するものを見てみましょう。 TypeScriptには、モジュール性、タイピング、およびJavaScriptにはなかったいくつかの機能があります。 ダートは同じことを申し出たのに、なぜ彼は離陸しなかったのですか? また、TypeScriptは、Angularバージョン2および4で使用されています。
実際、TypeScriptは進化的なアプローチを使用しています。 TypeScriptで記述を開始するために、新しい構文を学ぶ必要はありません。 通常、この言語の作成者は、TypeScriptはJavaScriptのスーパーセットであると主張しています。 JavaScriptは有効なTypeScriptであることがわかります。 JavaScriptにない機能でさえ、ES2015標準に従って設計されており、将来のために予約されているため、コードを書き換える必要はありません。
TypeScriptがどのように人気を博したのかは明らかです。では、誰がなぜこの類型化を追い求めているのか、それが与えるものを理解しましょう。 実際のところ、タイピングはすべてのプログラミング言語で行われますが、これは別の問題です。 入力は強いものと弱いものがあります。
JavaScriptは弱い型付けを使用します。 これは、任意の値を任意の変数に書き込むことができる場合です。
let anyVariable = 'It's a string'; anyVariable = ['No,', 'I've', 'changed', 'my', 'mind'];
TypeScriptは、 強い型付けまたは強い型付けを使用します。 強い型付けでは、変数を作成するとき、最初にこの変数がどの型になるかを言う必要があります。 同じことは、関数パラメーターに対しても機能します。
let anyVariable: string = 'It's a string'; anyVariable = ['I', 'can't', 'do', 'this']; // Exception
強い型付けの支持者は、彼女に有利な2つの議論を挙げています。
- まず、メモリを使用したより効率的な作業です。
- そして第二に、型変換エラーを防ぎます。
TSの場合のメモリでの効果的な作業は、いずれの場合でも、弱い型付けのJavaScriptにコンパイルされるため、無関係です。 しかし、実行時に発生するいくつかの型変換エラーからは、厳密な型指定が本当に役立ちます。
あなたがオンライン計算機をプログラミングしていると想像してください。 テキストフィールドがあり、ユーザーがそこに数値を入力し、文字列値を取得して、結果の文字列を関数に渡し、それを数式に代入します。
function getMonthlyIncome(val) { return val * 0.055 / 12; };
弱い型のJSは、数値に変換されない場合でも、この文字列をどの形式でもスキップします。 そして、そのような計算の結果として、ユーザーはNaN
ルーブルを取得できます。 TypeScriptでは、最初にこの文字列を自分で数値に変換してから、適切な形式で関数に渡す必要があります。 これを忘れると、コードのコンパイル段階でもエラーが表示されます。
function getMonthlyIncome(val: number): number { return val * 0.055 / 12; };
厳密な型指定にはいくつかの利点がありますが、TypeScriptが唯一のソリューションではないことを忘れないでください。 関数レベルのJavaScript自体に、追加の型チェックを追加できます。 はい、コードはもう少し冗長になりますが、他の言語も同じように型チェックをコンパイルすることを忘れないでください。
FacebookにはFlowというタイピングツールがあります。 OCamlシステムに似た型システムをJavaScriptコードに追加します。 Google Closure Libraryは、 JSDocコメントに基づいたトリッキーなタイピングメカニズムを使用します。 一般に、コンパイルやandな型システムがなくても、JSDocコメントを書くと、いくつかの問題を解決するのに役立ちます。 最初に、自分で作成する関数のインターフェースを理解します。 そして第二に、JSDocをサポートする一部のエディターは、 どこか間違ったものを転送していることを通知します。
はい。強力なタイピングを備えた他のプログラミング言語もあります。 同じエルム-オブジェクト指向により近い機能的アプローチを持っている場合、それはあなたにずっとよく合います。
いずれにせよ、これらすべての言語とコンパイラーを使用すると、プロジェクトの保守と構成が難しくなり、コードが小さくなりません。 たとえば、大規模なプロジェクトなど、オーバーヘッドコストが本当に価値がある場合にのみ、その方向を調べる必要があることがわかります。 JSがほとんどなく、ダウンロード速度が重要である小さな1ページのランディングを行う場合、余分な複雑さは大きな害を及ぼすだけです。