Netjsを使ってC#からTypeScriptへの変換をしてみた。
アイコンがイケメンです。素晴らしいライブラリです。間違いないです。
ではなくてC#をTypeScript/JavaScriptに変換してくれるライブラリです。
仕組み的にはC#で作成したクラスライブラリファイル(.dll)を読み込んで.ts/.jsファイルを作成するイメージになります。
使い方
GitHubからプロジェクトをクローンしてビルドします。
引数に変換したいdllを指定してexeをコマンドラインから実行します。
そのフォルダにファイルが作成されます。
mscorlib.tsを作成されたtsファイルと同じ階層に置きます。
.NetFrameworkはどこまでカバーされているのか?
基本的にほとんど変換されません。
using Systemの範囲内は少しカバーされています。
具体的には
Netjs/mscorlib.ts at master · praeclarum/Netjs · GitHub
この範囲です。
ようするにNetjsは純粋にC#プログラムをTypeScriptに変換してくれます。
だから既存のC#資産をTypeScirptに。。。ぐへへぇ。みたいな事は出来ません。
私の使い方
既存のC#資産をTypeScriptに変換して使いました。
さっきと言っていることが違うのですが、C#で書いていても.NetFrameworkをあまり使っていない資産というものもあるということです。
NSpeex - Speex for .Net and Silverlight - Source Code
こういう類の資産です。
現在、私の知る限り
- C/C++ -> JavaScript
- C# -> TypeScript/JavaScript
emscriptenでC変換されたjsは結構見かけます。
duocodeeが現時点で継続しているプロダクトとしては最新の環境になると思いますが
連載:「○○してみた」日記:C#→JavaScriptコード変換ってどうよ? DuoCodeを試してみた - @IT
出力されるコードを見て(´・ω・`)となってしまったため試しませんでした。
Netjsでは
SimpleVoiceDeliver/NSpeex.Decoder.ts at master · yuka1984/SimpleVoiceDeliver · GitHub
こんな感じのコードが出力されます。
これなら手を入れようかって気になるかなぁと思います。
使ってみて
元コードがかなり.NETを使っていないコードだったので、すんなり変換できましたが、.NETを使っている部分で足りない部分はmscorlib.tsに書き足しました。
たしかArray.CopyとRandomだったと思います。
ようするに足りなかったら自分で書けば良いんです。
にソースコードは載ってます。
変換精度ですが、一部(´・ω・`)な部分がありました。
IL詳しくないのでわかんないのですが、配列の値セットが
array[index] = value;
みたいに変換されたいのですがarray.set_item(index, value);
という風に変換されることがあって、その部分は手で修正しました。
後は
byte[] short[]
がnumber[]
に変換されるのでUint8Array、Int16Arrayに書き直した。C#の2次元配列[,]に対応していないため、元コードをジャグ配列に直してからビルドした。
ぐらいです。
大体1日もかからず目的のtsファイルを作れたのですごく助かりました。
生かせる部分は限定的ですがアイディア次第では楽することができるかもしれません。