TypeSpec 是微软推出的基于 TypeScript 的接口定义语言,用于描述 RESTful API 结构,本身非 C# 一部分;通过 @typespec/csharp 插件可生成 C# 客户端代码,但不支持服务端自动生成,也不参与运行时编译。
TypeSpec 是什么,和 C# 有什么关系?
TypeSpec 本身不是 C# 的一部分,它是微软推出的、基于 TypeScript 的接口定义语言(IDL),用来描述 API(尤其是 RESTful 服务)的结构。它不直接生成 C# 类型,但可通过插件(如 @typespec/openapi3 + @typespec/csharp)输出 C# 客户端或服务端代码。关键点是:TypeSpec 不编译进运行时,它只在设计/生成阶段起作用。
如果你期望“写个 .tsp 文件就自动编译成可运行的 C# 项目”,那会失望——它更像 Swagger + TypeScript 的增强版,目标是统一契约、驱动多语言代码生成。
如何用 TypeSpec 定义一个简单 API 并生成 C# 客户端?
先确保安装了 Node.js 和 TypeSpec CLI:
npm install -g @typespec/cli
创建 main.tsp,定义一个待生成的 API:
import "@typespec/http"; import "@typespec/openapi3"; import "@typespec/csharp";@service({title: "TodoService"}) namespace TodoApi { @route("/todos") @get op listTodos(): Todo[];
@route("/todos/{id}") @get op getTodo(@path id: string): Todo; }
model Todo { @key id: string; name: string; completed: boolean; }
然后执行生成命令(需先安装 @typespec/csharp 插件):
npx tsp compile . --emit @typespec/csharp --option "@typespec/csharp.emitter-output-dir=./GeneratedClient"
生成的 C# 代码默认包含 TodoApiClient、Todo 模型等,使用的是 System.Net.Http 和 System.Text.Json,不依赖第三方 HTTP 客户端库。