Fastify Typescript 请求查询

Aak*_*aye 11 node.js typescript fastify

我试图按照此处的 Fastify with Typescript 文档组合一个简单的端点:

https://www.fastify.io/docs/v3.1.x/TypeScript/

export default async function foo(fastify: any) {
       const MyInstance = new Foo(fastify.db);
       app.get<{ Querystring: IQueryString, Headers: IHeaders }>(
           "/foo",
           async (request: FastifyRequest, reply: FastifyReply) => {
              console.log(request.query); // *prints query object*
              const { queryObj } = request.query; // *Gives error: Object is of type 'unknown'*
              const result = await MyInstance.getFoo(queryObj);
              reply.status(200).send(result);
           }
       );
   }
Run Code Online (Sandbox Code Playgroud)

当我尝试访问该对象时,为什么会出现错误?request.query如何修复该错误?

Jav*_*ome 26

默认情况下,FastifyRequest.query的 typeRequestQuerystringDefault会映射到,unknown因为人们无法猜测您要为其设置哪些属性/类型。

如果您为某些请求定义了类型query,只需定义该请求类型并使用它:

type MyRequest = FastifyRequest<{
  Querystring: { queryObj: MyQueryObject }
}>
Run Code Online (Sandbox Code Playgroud)

然后将其指定为预期的请求类型:

 async (request: MyRequest, reply: FastifyReply) => {
   const { queryObj } = request.query // Ok
 }
Run Code Online (Sandbox Code Playgroud)