C#のローカルのアプリで使いたいTypeScript
のモジュールがあるのですが、TypeScript/JavaScriptの文法はほぼ知らないし、一から学んでいる時間も無いしで、C#に移植するのが難しい状況。
では、TypeScript/JavaScriptのコードをそのまま利用できるなら、解決できるんじゃないか? と考えたので調査しました。
Jering.Javascript.NodeJS
Jering.Javascript.NodeJS
を利用します。
ここの解説にある、Static API example
を、C#のコンソールアプリで実行するのが分かりやすいです。
この例では、
string javascriptModule = @"
module.exports = (callback, x, y) => { // Module must export a function that takes a callback as its first parameter
var result = x + y; // Your javascript logic
callback(null /* If an error occurred, provide an error object or message */, result); // Call the callback when you're done.
}";
と、文字列としてJavaScriptを配置しています。
JavaScriptのファイルを読み込んで実行するのなら、Invoking Javascript From a File
の解説にある、
Result? result = await nodeJSService.InvokeFromFileAsync<Result>("exampleModule.js", args: new[] { "success" });
のように、ファイルを指定します。
JavaScriptのファイルに、import
やexport
があるなら、ファイルの拡張子を、mjs
にします。→ 解決策がヘルプには見当たらず、Issues
を検索して読み込まないと分からないので、解決するまで時間がかかりました。
TypeScriptからJavaScriptへ変換
Jering.Javascript.NodeJS
は、TypeScriptを扱えないようです(できないか調べましたが、解決方法を見つけられず・・・)。ですので、JavaScriptに変換しないといけません。ネット上で変換サービスがいくつかあるのですが、変換結果に違いがあります。
あるサイトで変換したコードでは、実行するとエラーになりました。TypeScriptはJavaScriptの上位互換と聞いていたので、変換されたコードに問題はないだろうと思っていましたが違いました。
エラーになったファイルを、
Typescript to Javascript compiler
で、変換したところ、問題は解消しました。
(このサイトの、Target
やModule
についてまでは、調べていないので、何が適切なのか分かりませんが)
VisualStudioで変換する
(2023-12-5追記)
TypeScriptのコードを、VisualStudioのプロジェクトに配置して、ビルドできるようにすれば、JavaScriptのファイルが作成されます。
メモ
私の当初の目的(C#のアプリで、あるTypeScriptのモジュールを利用する)は達成できませんでした。
JavaScriptのコードを変更しないといけない部分が多く、結局JavaScriptが分からないと対応しきれなかったのです。
確認環境
- Jering.Javascript.NodeJS 7.0.0
- .NET 7