TypeScriptがリリースされました。これは私にとってエキサイティングなニュースですが、既存のすべてのJavaScriptファイルをTypeScriptに変換するにはどうすればよいですか。
TypeScriptがリリースされました。これは私にとってエキサイティングなニュースですが、既存のすべてのJavaScriptファイルをTypeScriptに変換するにはどうすればよいですか。
回答:
これは非常に問題になると思います。TypeScriptはJavaScriptのスーパーセットです。これは、すべての有効なJavaScriptコードが有効なTypeScriptコードでもあることを意味します。これは間違っています。次のコードはJavaScriptでは正しいですが、TypeScriptでエラーが発生します。
var data={x:5, y:6};
data.z=5;
データを「アンビエント」として宣言することで、JavaScriptの動的な動作を取得できます
var data:any={x:5, y:6};
data.z=5;
これはTypeScriptでも動作します。それでも、.jsファイルの拡張子を.tsに変更して、このファイルをTypeScriptコンパイラに渡すことができます。これは本当に混乱し、freenodeのTypeScript IRCチャネルで質問しました。Typescriptコンパイラは有効なJavaScriptの入力をチェックし、何かを見つけた場合には何もしないことがわかりました。直感的にこれはいいですね。ファイル拡張子を更新するだけで、すべてのJavaScriptをTypescriptに「変換」できるはずです。残念ながら、これは期待どおりに機能しません。次のコードがあるとします。
var func=function(n){alert(n)};
var data={x:5};
data.z=6;
編集:これをコンパイルしようとしたところ、うまくいきません。申し訳ありませんが、誤解されているようです。TypeScriptコンパイラは純粋なJavaScriptさえ受け入れません。何が問題だったかを調べてみます。
ファイル拡張子を.tsに変更し、他のコードで関数funcを使用しました。最初はすべて正常に見えますが、醜いバグが発生します。静的型チェックがおそらく役立つと判断し、コードを次のように変更します。
var func=function(n:string){alert(n)};
var data={x:5};
data.z=6;
ただし、これは有効なJavaScriptコードではなくなり、コンパイラーが大量のエラーメッセージを生成するようになります。結局、データにはメンバー "z"がありません。...この動作は、デフォルトのタイプが常に「任意」である場合は回避できますが、タイプの推論はまったく役に立ちません。
では、この問題をどのように解決しますか? 答えは、宣言ファイルです。JavaScriptコードを「そのまま」プロジェクトで使用し、いくつかの.d.tsファイルを使用して静的型チェックを実行できます。これらは、JavaScriptのファイルで宣言されている変数、メソッド、および「クラス」を、それらのタイプを含めてコンパイラーに通知します。したがって、それらはコンパイル時の型チェックと素晴らしいインテリセンスを可能にします。私の例の.d.tsファイルは次のようになります
declare var data:any;
declare function func(n:string);
これを「myjsfile.d.ts」として保存し、typescriptにインポートします。
///<reference path="myjsfile.d.ts"/>
コンパイルしたtypescriptの上にあるhtmlファイルにJavaScriptスクリプトを必ず含めてください。ここに興味深いリンクがあります。「JavaScriptをTypeScriptに変換する」セクションに興味があるかもしれません。
noEmitOnError。TypeScriptは有効なJSコードについて文句を言うが、オフになっている限り、操作を実行してトランスパイレーションを出力できます。したがって、エラーが表示されます(邪魔です)が、実際にそれらのエラーを無視して、それにもかかわらずTypeScriptトランスパイレーションを使用できます(たとえば、JSからTSへの段階的な移行を可能にします)。また、少なくとも一部のエラーはnoImplicitAny(おそらくIDKを除いてすべて)などのスイッチを使用して無効にできます。
バージョン9(EAPビルドが利用可能)以降のReSharperには、JavaScriptコードをTypeScriptに自動的に変換する機能があります。まず、.jsファイルの名前を.tsに変更し、次のようなR#の提案を確認します。

実際の例では試していません。ただし、多数のJavaScriptパターンを変換できます。
端末から(mac):
for f in *.js; do mv $f `basename $f .js`.ts; done;
すべての.jsファイルの名前を.tsに変更します
これはややこじんまりですが、Benjaminが上記で指摘したように、JavaScriptファイルは有効なTypeScriptです。タイプ、クラス、インターフェースなどをJavaScriptに追加する場合は、これらの概念を使用してコードを設計および変更する必要があります。これには自動変換がほとんどまたはまったくありません。
GNU findutils(ほとんどの* nixes)+ Bashの場合は、次のようにします。
find -type f -name '*.js' -exec bash -c 'mv "${1}" "${1%???}.ts"' bash {} \;
var a = 5; a = "";