快速将C#类型转成TypeScript介面定义
使用 TypeScript 处理 AJAX 请求时,常需要在前端定义与 C# 物件属性一致的 TypeScript 类型,以便将后端传来的 JSON 资料还原成强类型物件。针对较正式的资料模型,我会用 CodeGen 方式同步 C# 与 TypeScript 端的类型定义(顺便处理多语系问题)。但蛮多时候处理对象只是零散的小类型,不必杀鸡用牛刀,针对这类需求,推荐一个好用工具-TypeLITE。
在 NuGet 查关键字"typelite",很快就可找到 TypeLite 套件。
安装后,项目会加入 TypeLite.dll、TypeLIte.Net4.dll,并在 Scripts 目录下新増 TypeLite.Net4.tt。接着就可以修改 TypeLite.Net4.tt 内容,决定为哪些类型产生 TypeScript 定义。
TypeLITE 预设做法是执行 .ForLoadedAssemblies ()自动寻找组件标注[TsClass] Attribute 的类型,但实务上用 .For<类型名称>()列举要转换的类型(如红框所示)比较方便;若类型来自网站项目以外的组件,记得要加上<#@ assembly #>宣告(如黄框所示)。
修改 TypeLite.Net4.tt 并存档,T4 工具将自动产生或更新 TypeLite.Net4.d.ts,在其中可看到我们用 .For<类型名称>()所列举类型的 TypeScript 介面定义,若类型有参照到其他类型,TypeLITE 会自动包含进来,非常方便。(在范例中用到 Reflection 的 MethodInfo,相关介面就像提棕子一般整串被拉进来。)
TypeScript 定义档仅在开发编译阶段提供强类型约束及提示,不会产生任何 JavaScript,不用担心 TypeLite.Net4.d.ts 的内容太复杂。就这样,轻轻松松几个步骤,就把 C# 端的类型定义搬到 TypeScript 端~
又到了呼口号时间:TypeLITE,好用!好用!好用!