目前 Web 项目多使用前后端分离的开发模式,通过 Ajax 调用 API 返回数据。
这样获取的数据缺少类型,会给后期开发带来维护问题,例如 API 后端变动会导致前端应用无法正常使用,而且是运行时错误,很难检查。
推荐的做法是使用 TypeScript 建立类型检查以减少运行时错误,保证多数情况下,只要编译成功,应用就应该是正确运行的。而付出的代价是在项目建立初期就必须建立各个 API 数据类型定义,会有额外的工作量;后期维护时也需要根据后端接口定义维护这些数据定义。可谓有得有失。
介于这个问题,我希望能够直接从后端直接导出 TypeScript 类型定义,以在前端编译时进行提供类型检查。未来如果接口有变动,把类型定义文件放入前端即进行类型检查。
所以,我们需要一个工具来编译 C# 模型为 TypeScript 声明,我创建了 TypeSharp 库(https://github.com/zmjack/TypeSharp)。
TypeSharp
TypeSharp 非常易于使用且提供了 CliTool 为 .NET Core 项目进行 TypeScript 类型声明。
您可以通过 NuGet 来安装并使用它:
dotnet add package TypeSharp --version 0.6.0
通过简单的两个步骤,即可生成 TypeScript 类型声明:
- 实例化 TypeScriptModelBuilder;
- 使用 CacheType 方法缓存类型;
- 使用 Compile 方法生成 TypeScript 代码。
假设有类型:
public class Cls
{
public int Value { get; set; }
}
那么,为 Cls 类生成 TypeScript 声明这样编写:
var builder = new TypeScriptModelBuilder();
builder.CacheType<Cls>();
var tscode = builderCompile();
运行后,tscode 为:
declare namespace App {
interface Cls {
value? : number;
}
}
TypeSharp Cli
TypeSharp Cli 工具可以为项目生成 TypeScript 定义。
使用命令从 NuGet 安装全局工具:
dotnet tool install dotnet-ts -g
在项目中安装 TypeSharp 库,使用 TypeScriptModel 标记要导出 TypeScript 声明的类。
TypeSharp Cli : tsg 命令会为 TypeScriptModel 标记类导出声明:
[TypeScriptModel(Namespace = "Ns")]
public class Cls
{
public int Value { get; set; }
}
先编译项目,然后在项目目录下使用命令来生成:
dotnet ts tsg
默认情况下,生成文件会在 Typings 目录下,可以使用 -o 参数自定义生成目录:
dotnet ts tsg -o tsout
生成文件内容如下:
/* Generated by TypeSharp v0.6.0.0 */
declare namespace Ns {
interface Cls {
value? : number;
}
}