[C#]MemoryPackを使ってみたい6 - GenerateTypeScriptのオプション追加(2点)
ver1.5.0以降、ver1.8.10までで、TypeScript出力時のオプションが2つ追加されています。
Configure import file extension and member name casing
MemoryPackGenerator_TypeScriptImportExtension
<ItemGroup>
<CompilerVisibleProperty Include="MemoryPackGenerator_TypeScriptImportExtension" />
</ItemGroup>
<PropertyGroup>
<!-- allows empty -->
<MemoryPackGenerator_TypeScriptImportExtension></MemoryPackGenerator_TypeScriptImportExtension>
</PropertyGroup>
TypeScriptのコードが出力される際、importで指定されるファイル名の拡張子をカスタマイズできます。
MemoryPackGenerator_TypeScriptImportExtension
をcsprojに追加しなければデフォルトで.js
が付加されます。
import { MemoryPackWriter } from "./MemoryPackWriter.js";
import { MemoryPackReader } from "./MemoryPackReader.js";
MemoryPackGenerator_TypeScriptImportExtension
を空にしておくと、
import { MemoryPackWriter } from "./MemoryPackWriter";
import { MemoryPackReader } from "./MemoryPackReader";
こう。
MemoryPackGenerator_TypeScriptImportExtension
を.ts
にしておくと
import { MemoryPackWriter } from "./MemoryPackWriter.ts";
import { MemoryPackReader } from "./MemoryPackReader.ts";
といった感じになります。
JavaScriptは処理系によってこの辺の記述が変わるので、用途に応じてカスタマイズできるようになりました。
MemoryPackGenerator_TypeScriptConvertPropertyName
<ItemGroup>
<CompilerVisibleProperty Include="MemoryPackGenerator_TypeScriptConvertPropertyName" />
</ItemGroup>
<PropertyGroup>
<!-- default is true -->
<MemoryPackGenerator_TypeScriptConvertPropertyName></MemoryPackGenerator_TypeScriptConvertPropertyName>
</PropertyGroup>
TypeScriptコードが生成されるときに、デフォルトではフィールド名がcamelCaseになりますが、これをfalseにしておくことでC#側で指定したフィールド名のままで生成されるようになります。
[MemoryPackable]
[GenerateTypeScript]
public partial class User
{
public int UserId { get; set; }
public string UserName { get; set; } = default!;
}
falseの時。
export class User {
UserId: number;
UserName: string | null;
constructor() {
this.UserId = 0;
this.UserName = null;
}
...
デフォルトまたはtrueの時。
export class User {
userId: number;
userName: string | null;
constructor() {
this.userId = 0;
this.userName = null;
}
...
名前付けルールにもあわせることができます。
まとめ
初回のリリースから2ヶ月ほどたちますが、皆さん結構注目しているようで採用事例も出てきていますし、バージョンも1.8.10まできていて着々と強化されていますね。