我是 Fastify 的新手,我不想从头开始编写 JSON 模式对象,而是利用从现有数据访问控制器公开的 TypeScript 接口和类型。如何在开发时或运行时将这些 TS 接口/类型转换为 JSON 模式,以供 Fastify 使用以更好地支持 RESTful API 验证?预先感谢您。
根据 Fastify 文档,您可以通过使用类型提供程序来实现您想要的。
在下面的示例中,我使用 Typebox 生成要在运行时使用的 TypeScript 类型和 JSON 模式兼容对象
import Fastify, { type RequestGenericInterface } from "fastify";
import { type TypeBoxTypeProvider } from "@fastify/type-provider-typebox";
import { type Static, Type } from "@sinclair/typebox";
const UserSchema = Type.Object({ username: Type.Optional(Type.String()) });
type UserType = Static<typeof UserSchema>;
const app = Fastify().withTypeProvider<TypeBoxTypeProvider>();
interface RequestPayloadType extends RequestGenericInterface {
Querystring: UserType;
}
app.get<RequestPayloadType>(
"/user",
{ schema: { querystring: UserSchema } },
(req, _) => {
const result = req.query.username ?? "no-name";
return result;
}
);