スタティック型チェック用のJavaScript


執筆John Reilly ✏️
JavaScriptやTypescriptを使用してプロジェクトを構築する際により良い結果に導くかどうかについて議論があります.JavaScriptコードベースの型にJSDOC注釈を使用することの出現は、この議論に新しいダイナミックを導入します.
このガイドでは、我々はそれがどのように見えるかを調べて、(独断的)結論に来る.
あなたが2018年に私に話しかけたならば、私は堅実にタイプスクリプトを使用して、JavaScriptから離れて操縦することを勧めました.
理論的根拠は単純です:私は、静的なタイピングが生産性と生産のバグを避けることに関して提供する値を非常に確信しています.私は、これが論争の的な問題であることができることを感謝します、しかし、それは主題に関する私の解決された意見です.その他の意見もある.
タイプスクリプトは、長い静的なタイピングストーリーを持ちました.JavaScriptは動的に型化されているため、歴史的にはそうではありません.JSDOCのTypeScriptのサポートのおかげで、JavaScriptは静的にチェックされることができます.

JavaScriptは何ですか?
JSDOC自体は1999年まで遡る.によるとWikipedia :

JSDoc is a markup language used to annotate JavaScript source code files. Using comments containing JSDoc, programmers can add documentation describing the application programming interface of the code they're creating. The TypeScript team have taken JSDoc support and run with it. You can now use a variant of JSDoc annotations to provide type information in JavaScript files.


これはどんな感じですか.を取るsimpleTypeScript 以下に記す
let myString: string; 
このタイプスクリプトステートメントはJSDOC注釈付きの同等のJavaScriptステートメントになります.
/** @type {string} */
let myString; 
これはタイプスクリプトコンパイラが理解できる型のJavaScriptです.

JSDoc JavaScriptを使う理由は?
なぜあなたはJScriptのJavaScriptを使用するのですか?まあ、可能な使用例の範囲があります.
おそらく、あなたは簡単なノードスクリプトを書いています、そして、あなたは誤りを避けるために少しタイプ安全性を望みます.または多分静的な型チェックの水の中でプロジェクトのつま先をディップするが、完全にコミットすることなく.JSDOCはそれを許可します.または、あなたのチームは単にコンパイルステップを持っていないかもしれません.
実際には、Webpackチームの理論的根拠でした.少しの歴史:Webpackは、常にJavaScriptコードベースでした.コードベースが成長して、成長して、静的タイピングを使うことに関する議論がしばしばありました.しかし、コンパイルステップを必要としなかった.
タイプスクリプトは、しばらくの間JSDOCの援助でJavaScriptをチェックするタイプのサポートを静かに加えていました.初期のサポートは--checkJs コンパイラオプションTypeScript 2.3 .
このアプローチを使用して実験的に開始した名前のコミュニティメンバーは、WebPackコードベースをチェックします.His PR タイプスクリプトによるJavaScriptのタイプチェックを改善するのを助けたテストケースで終わりました.
V 2型.9は、Webpack仕事の結果としてJSDOC改善の全ホストとともに出荷しました.それがこのように広く使用されたプロジェクトであるので、これはJavascriptコードベースをチェックするためにJSDOCを使用するアプローチを一般化するのを助けました.それは、アプローチがかなり大きなコードベースで働くことができることを示しました.
最近では、タイプスクリプトによるJSDOCタイプのチェックは非常に強力です.typescriptと全く同じではありません(すべてのタイプスクリプト構文がJSDOCでサポートされていない)、機能のギャップはかなり小さいです.
今日では、静的タイピングのすべての利点を持つJavaScriptコードベースを構築するのは完全に正当な選択です.

なぜtypescriptを使うのですか.
プロジェクトを起動して静的なタイピングを使いたい場合は、どのようにしてJSDOCとJavaScriptを選択しますか?
さて、コンパイルステップを避けるために説得力のある必要性がない限り、私は個人的にTypeScriptはいくつかの理由のためのより良い選択であると信じています.
まず、スクリプトを直接使用するためのツールのサポートはJSDoc JavaScriptの場合よりも優れています.執筆時に、エディタでのリファクタリングツールなどのものは、JSDoc JavaScriptよりもより効果的にtypescriptで動作します.つまり、これらは徐々に改善している.
第二に、JSDOCとの作業は明確に“noisier”です-それは同じレベルの安全性を達成するためにはるかにキーストロークを必要とします.
次のタイプスクリプトを考えます.
function stringsStringStrings(p1: string, p2?: string, p3?: string, p4 = "test"): string {
  // ...
}
等価JSDoc JavaScriptと比較します.
/**
 * @param {string}  p1
 * @param {string=} p2
 * @param {string} [p3]
 * @param {string} [p4="test"]
 * @return {string}
 */
function stringsStringStrings(p1, p2, p3, p4) {
  // ...
}
私はtypescriptとの私の親しみによって偏っているかもしれません、しかし、私はタイプスクリプトがJSDOC JavaScript選択肢と比較して読んで、理解するのがより簡単であるとわかります.すべてのJSDOC注釈がコメントの中で生きているという事実は、直接構文ではなく、従うのが難しくなります.(それは確かに多くの対コードのテーマは非常にかすかな色でコメントを提示することを助けません.)
typescriptを支持する私の最終的な理由はpit of success .静的型付けとJavaScriptになると、あなたは穀物に対して切断しています.
一方、静的なタイピングとタイプスクリプトに関しては、あなたは穀物で切っています.あなたは静的なタイピングを選ぶために懸命に働かなければなりません.JavaScriptのデフォルトは離れている間、typescriptのデフォルト値は静的型付けになりがちです.
静的な入力を非常に好む誰かとして、あなたは、これが私に説得力がある方法を想像することができます!

どちらが良いのですか?
要約すると、ある意味で、私は人々がJavaScriptまたはタイプスクリプトを使用するかどうか、非常に強く感じません.つまり、静的なタイピングをすることは新しいプロジェクトにとって利益になるでしょう.
私は、人々が成功のピットに落ちることを切望しているので、新しいプロジェクトのための私の推薦は、タイプスクリプトです.
私は本当にJSDOC自身が好きで、小さなプロジェクトでしばしばそれを使います.これは、TypesScriptの機能に素晴らしい追加です.より大きいプロジェクトのために、私はGet Goからより多くのタイプスクリプトと行きそうです.
しかし、本当に、どちらかがしっかりした選択です.

多くのタイプスクリプトを書くこと?Watch the recording より読みやすいコードを書くことについて学ぶ最近のtypescript meetupの.