読者です 読者をやめる 読者になる 読者になる

眠いしお腹すいたし(´・ω・`)

C#関連を主に書きます。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

Netjsを使ってC#からTypeScriptへの変換をしてみた。

github.com

アイコンがイケメンです。素晴らしいライブラリです。間違いないです。

ではなくてC#をTypeScript/JavaScriptに変換してくれるライブラリです。

仕組み的にはC#で作成したクラスライブラリファイル(.dll)を読み込んで.ts/.jsファイルを作成するイメージになります。

使い方

  1. GitHubからプロジェクトをクローンしてビルドします。

  2. 引数に変換したいdllを指定してexeをコマンドラインから実行します。

  3. そのフォルダにファイルが作成されます。

  4. 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

こういう類の資産です。

現在、私の知る限り

github.com

duoco.de

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だったと思います。

ようするに足りなかったら自分で書けば良いんです。

Reference Source

ソースコードは載ってます。

変換精度ですが、一部(´・ω・`)な部分がありました。

IL詳しくないのでわかんないのですが、配列の値セットが array[index] = value;みたいに変換されたいのですがarray.set_item(index, value);という風に変換されることがあって、その部分は手で修正しました。

後は

  • byte[] short[]number[]に変換されるのでUint8Array、Int16Arrayに書き直した。

  • C#の2次元配列[,]に対応していないため、元コードをジャグ配列に直してからビルドした。

ぐらいです。

大体1日もかからず目的のtsファイルを作れたのですごく助かりました。

生かせる部分は限定的ですがアイディア次第では楽することができるかもしれません。