型システムがJavaScriptコードを改善する方法

そのため、好転する時間はありません。また、その月はすでに完成に向けて努力しています。 伝統に従って、コース「JavaScript Developer」で新しいスレッドが開始されるまで、数日が残ります。コースを開始する前に、有用な資料の翻訳を共有します。



バニラJavaScriptは本質的に入力されません。 彼は数字や文字列を計算できるので、彼を「スマート」と呼ぶこともできます。



これにより、ブラウザで、またはNode.jsの実行中にJavaScriptコードを簡単に実行できます。 ただし、多数のランタイムエラー(ランタイム)に対して脆弱であり、ユーザーエクスペリエンスが損なわれる可能性があります。







後で説明することに出くわした場合、型システムを使用する場合にのみ得られます。





フロー、TypeScript、またはReasonML



信頼性と安定性を高めたい既存のコードベースがあるとします。 既存の入力エラーを考慮して、このためにFlowまたはTypeScriptを使用することができます(これらの構文は非常に似ています)。



一方、これらのかさばるツールのそれぞれを使用するのは難しいです。 これまでに開発されていないコードのタイプとインターフェースを作成する作業を自分で行います。



それでも、FlowとTypeScriptは、コードの入力を追加するときに100%のセキュリティを提供しません。

このため、推論によって理想的なタイピングセキュリティが実現され、変数と関数シグネチャの注釈付けがより簡単になります。



シンプルで明確に考案された例



次のコードを検討してください。



let add = (a, b) => a + b;
      
      





通常のJavaScriptでは、これらの引数は数字または文字列です。 TypeScriptまたはFlowでは、これらの引数に次のように注釈を付けることができます。



 let add = (a: number, b: number) => a + b
      
      





これで、明らかに2つのint値を設定したようです。 2つのフロートや2つの文字列ではなく、他の演算子が加算操作に使用されます。



それでは、Reasonで少し変更された例を見てみましょう。



 let add = (a: string, b: number) => a + b add('some string', 5) // outputs: "some string5"
      
      





この機能は機能します! そして、それは驚くべきことかもしれません。 Reasonはこれをどのように理解していますか?



 let add = (a, b) => a + b; add("some string", 5); /* This has type: string but somewhere wanted: int */
      
      





この機能には、実装レベルでの欠陥がありました。 Reasonには、int、float、stringを追加するためのさまざまな演算子があります。



この単純な例の目的は、アプリケーションをドロップしなくても、余分な「タイプエラー」が発生する可能性があることを示すことです。



Reasonプログラムでは、開発者は型またはnull値の非互換性に起因する生産上のバグに対処する必要はありません。



開発者の経験



TypeScriptの最も優れた機能の1つは、コードエディターに改善または自動補完の提案が表示されることです。



これは、TypeScriptプログラムがオートコンプリートを提供するために完全にコンパイルされる必要がないため、TypeScriptがReasonよりも優先される領域の1つです。 Reasonは、有用な修正を提供する前に、構文およびタイプのすべてのエラーを修正することを強制します。



これはVSCodeでどのように機能するかですが、vimを使用する多くのReason開発者を知っています。 ここでは比較しません。



私はReasonの大ファンですが、TypeScriptまたはFlowでアプリケーションを作成しました。 TypeScriptをめぐる誇大広告の波は、それを選択するための良い動機を提供します。そのため、コミュニティサポートが充実しています。



一方、理由は、使用できる記事とドキュメントが少ないため、使用が困難です。 その開発で修正されることを願っています。



Reasonに興味がある場合は、 ここでそのドキュメントを見つけることができます。 Twitterで@ jordwalke@ jaredforsyth@sgroveのような人をフォローしてください。 彼らはReason / OCamlエコシステムについて多くを語ることができます。



ReasonとGraphQLの連携方法について知りたい場合は、他の記事「GraphQLの理由、タイプセーフWebアプリケーションの未来」を参照してください。



素材についてのフィードバックをお待ちしており、確立された伝統に従って、すべての読者を3月25日に教師のAlexander Korzhikovが開催するオープンデー招待します。



All Articles