20

ファイルをcoffeescriptからtypescript、javascriptに変換するビルドチェーン設定があります。私の質問は、型署名をコーヒースクリプト関数に追加するための最も邪魔にならない方法は何ですか?

Coffeescriptは、バッククォートを介して生のjavascriptをサポートします。ただし、これは、coffeescriptがバッククォートスニペットを理解しなくなったことを意味します。

Coffeescriptはこれらを拒否します:

f = (`a:String`) -> a + 2
f = (a`:String`) -> a + 2

私はこれを関数の上に書くことができます:

`var f = (String) => any`

コンパイルしますが、型チェックは行いません。これは、Coffeescriptがすでに変数を宣言しているためだと思います。

それを機能させる方法を理解する唯一の方法は、多くの定型文を必要とします

f = (a) ->
  `return (function(a:String){`
  a + 2;
  `})(a)`

新しいCoffeescriptReduxコンパイラではバックティックが正しく機能していないようです: https ://github.com/michaelficarra/CoffeeScriptRedux/issues/71

これは疑わしい試みであることを私はよく知っています、それは今のところ単なる実験です。現在contracts.coffeeを使用していますが、実際のタイプを探しています。

4

4 に答える 4

20

これが私のプロジェクトで、CoffeeScriptをTypeScriptに変換し、それを型を含むd.tsファイルとマージします。次に、コンパイルエラーがある場合はそれを報告します。

コンパイル済みコーヒーと呼ばれます。

于 2014-02-12T21:01:12.253 に答える
16

CoffeeScriptを作成する場合は、CoffeeScriptを作成してJavaScriptにコンパイルすることをお勧めします。

TypeScriptの利点は、主に設計時の利点と優れたツールです。したがって、CoffeeScriptとJavaScriptの途中で使用すると、CoffeeScriptコードに基づいて設計時間とツールが得られるため、ほとんど利点がありません。

CoffeeScriptで作成したライブラリをTypeScriptで使用したり、その逆を行ったりすることができるため、CoffeeScriptでCoffeeScriptライブラリを維持し、新しいTypeScriptファイルで使用して、どちらに進むかを決めることができます。

更新:この答えのこのような幅広い誤解がどのようにあるのかわかりません-私はこれをうまく説明していないと思います(それが単なるストローマンの議論や言語に対する過敏症であると仮定するのではなく)比較)。

TypeScriptは確かにJavaScriptの型システムです。静的型は、ワークフローの早い段階でプログラマーとしてよりよく使用されます。IDEに設計時の警告があるということは、変数名の入力ミス、パラメーターの誤り、無効な操作などの一般的なエラーを迅速に修正することを意味します。コードに下線を引き、エラーで注釈を付けることは、即座のフィードバックを意味します。コンパイル時にこれを使用するのは良いことですが、フィードバックループは長くなります。TypeScriptを使用すると、この時点ですべての型が消去されるため、ランタイムについては説明しません。

すべての「TypeScriptvsCoffeeScript」コメントに関して-この質問はそれについてはまったくありません。問題は、CoffeeScriptからTypeScript、そしてJavaScriptへのコンパイルについてです。これが理想的ではない理由を見てみましょう。

  • コンパイル時にのみタイプフィードバックを受け取ります
  • オートコンプリートは取得されません
  • CoffeeScriptコードはコンパクトではなくなります-タイプアノテーションがあります
  • CoffeeScriptコードは、中間コンパイラがないと有効ではなくなります
  • 追加のコンパイラを使用する必要があり、CoffeeScriptバージョンxおよびTypeScriptバージョンyと連携している必要があります。
  • IDEはCoffeeScriptコードを理解しません
于 2012-10-14T12:47:21.440 に答える
2

私が思いついたのは私ができる最善のことだと思います。新しいCoffeescriptReduxコンパイラでは、事態はさらに困難になります。実際には、現在のCoffeescriptコンパイラをハックしてこれを機能させる方が簡単です。

これをハッキーに見せないようにする方法は次のとおりです。

`var f : (a:Number) => Number = originalF`

ただし、typescriptの弱い型推論は、この形式ではうまくいきません。これにより、適切な型分析が行われます。

f = (a) ->
  `var a : Number = a`
  a + 2

ただし、このフォームで戻り値を指定する方法はまだわかりません。

于 2012-10-15T00:07:16.813 に答える
2

Typescriptは強力なタイプのjavascriptです。Coffee-scriptは、より快適な書き込みと読み取りの方法を提供します。私はコーヒースクリプトを言語として扱いません。それはただの方法であり、どの言語にも付けられるスタイルです。コーヒースタイルのスマートコンピュータ言語は未来であるべきです

そのような強いタイプを「サポート」するのは、バッククォートを通して非常に醜くて愚かです。強いタイプのコーヒースクリプトを実装する正しい方法:

  • CoffeeScriptReduxソースを変更して、サポートされている強い型を追加します
  • Coffee-Script構文を使用するようにTypescriptパーサーソースを変更します。
    • 誰もこれをしていないようです。
于 2015-07-03T08:41:09.423 に答える