私はこれも興味があるので、この回答はちょっとしたダンプです。それが役に立てば幸い。
Googleクローズコンパイラを使用して、CoffeeScriptが生成するコードを静的に分析します。それは本当に良いスタティックアナライザーを持っています、そして、私はここに車輪を再発明する正当な理由があるかどうかわかりません。簡単な方法は、単に手で注釈を記述することです:
###*
* @param {number} x
* @param {number} y
* @return {number}
###
adder = (x, y) -> x + y
それは少し冗長だが、一方で、あなたは本当に強力であると確認することができる閉鎖コンパイラの静的解析能力を借りていますたくさん。実際には、より簡潔な方法で型名を記述し、次にコーヒーファイルを書き換えるスクリプトを用意しています。私のコードは次のようになります:
#! {number} x {number} y @return {number}
adder = (x, y) -> x + y
私は確かにリライタがかなり簡単であることがわかります。
私が上に移動する前に簡単なメモ。 コードを-b
(裸)でコンパイルしている場合は、クロージャコンパイラで実行してください。クロージャーコンパイラはかなり良いですが、データフロー解析を行うのに十分スマートではありません。 CoffeeScriptは、デフォルトで無名関数にコードをラップします。これにより、コンパイラが起動します。このようにJSに
adder = (number x, number y): number -> x + y
:
同じパスに沿って別のオプション(これはCoffeeScriptのとの互換性を破るだろうが、多くのクーラーになりますが)コーヒーコンパイラはこのような何かをコンパイル持っているだろう
/***
* @param {number} x
* @param {number} y
* @return {number
*/
var adder = function(x, y) {
return x + y;
};
コンパイル時にクロージャコンパイラに供給される可能性があります。エラーがなければ、コンパイラはすべてのコメントを削除します。
確かに、this guyはこれを正確に実行しているようです。残念ながら、彼の仕事は不完全な状態にあるようです。
これらすべてのケースでは、ハードワークスタティック型チェックをクロージャコンパイラに委ねます。これをやりたくない場合は分かりますが、完全に新しい静的解析ツールを最初から構築することは価値があると私に納得させるのは難しいでしょう。 :)
EDIT 1年後:最近はtypescriptを使用しています。 :)
生成されたJSファイルでjshintを実行するのはどうですか?あなたが探しているものを行うJSとJSツールへのコーヒーコンパイルはまれではありません。 –