如何输入 Fastify 请求和回复负载?

Bla*_*ett 10 node.js typescript fastify

我刚刚开始使用 Typescript 来使用 Fastify,并且非常喜欢它。

但是,我试图弄清楚是否可以输入响应负载。我有用于序列化工作的响应模式,这可能就足够了,但我有内部类型化的对象(例如 IUser),最好让 Typescript 检查。

以下内容效果很好,但我想返回一个 TUser 例如,如果我返回不同的内容,则有打字稿。使用模式仅仅排除字段。

interface IUser {
    firstname: string,
    lastname: string
} // Not in use in example

interface IUserRequest extends RequestGenericInterface {
  Params: { username: string };
}

const getUserHandler = async (
  req: FastifyRequest<IUserRequest, RawServerBase, IncomingMessage | Http2ServerRequest>
) => {
  const { username } = req.params;
  return { ... }; // Would like to return instance of IUser
};


app.get<IUserRequest>('/:username', { schema }, getUserHandler);

Run Code Online (Sandbox Code Playgroud)

我可以为响应扩展一个等效的 RequestGenericInterface 吗?

小更新:似乎可以使用reply.send()来添加类型,但为了自我文档的目的,最好在上面提供T。

ael*_*sia 3

文档中:

使用这两个接口,定义一个新的 API 路由并将它们作为泛型传递。简写路由方法(即 .get)接受包含五个命名属性的通用对象 RouteGenericInterface :BodyQuerystringParamsHeadersReply

您可以使用该Reply类型。

interface MiscIPAddressRes {
  ipv4: string
}
server.get<{
  Reply: MiscIPAddressRes
}>('/misc/ip-address', async (req, res) => {
  res
    .status(_200_OKAY)
    .send({
      ipv4: req.ip // this will be typechecked
  })
})
Run Code Online (Sandbox Code Playgroud)