【问题标题】:Fastify Typescript request queryFastify Typescript 请求查询
【发布时间】:2021-04-27 18:38:40
【问题描述】:

我正在尝试按照这里的 Fastify 和 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);
           }
       );
   }

为什么我在尝试访问 request.query 对象时收到错误,我该如何解决?

【问题讨论】:

  • 永远不要注释内联回调参数的类型。相反,使用类型推断。那是async (request, reply) =&gt; 而不是async (request: FastifyRequest, reply: FastifyReply) =&gt;。注意:您链接的文档中的示例正确地做到了这一点
  • 修复了错误。但是,类型推断似乎不适用于async(request, reply) 。我对requestreply 没有任何暗示。
  • @AluanHaddad 永远不要说永远。

标签: node.js typescript fastify


【解决方案1】:

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

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

type MyRequest = FastifyRequest<{
  Querystring: { queryObj: MyQueryObject }
}>

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

 async (request: MyRequest, reply: FastifyReply) => {
   const { queryObj } = request.query // Ok
 }

【讨论】:

    猜你喜欢
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 2018-04-15
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多