【问题标题】:How can I use packages that extend `koa.Request` in TypeScript?如何在 TypeScript 中使用扩展 `koa.Request` 的包?
【发布时间】:2021-09-04 13:28:40
【问题描述】:

我正在尝试同时使用 koa-tree-routerkoa-bodyparser,但我不断收到 TypeScript 错误:

export const userLoggingRouter = new KoaTreeRouter<any, DefaultContext>();

userLoggingRouter.post('/logs/action', (ctx) => {
  const logEntries = ctx.request.body;
  const user = ctx.state.user;

  // ...
});

错误 TS2339:“请求”类型上不存在属性“正文”。

我安装了@types/koa-bodyparser,它包含以下定义:

import * as Koa from 'koa';

declare module 'koa' {
    interface Request {
        body: string | Record<string, unknown>;
        rawBody: string;
    }
}

但它似乎没有做任何事情。我找到了this question,但是直接导入koa-bodyparser 也没有任何作用。如何让 TypeScript 识别扩展的 Request 类型?

编辑:在我的项目中创建一个.d.ts 文件,其中包含以下内容:

import {Request} from "koa";

declare module "koa" {
  interface Request {
    body: any;
  }
}

使编译错误消失,但这似乎是一个不优雅的解决方案,因为我必须为每个修改 koa.Request 的包复制类型信息。

【问题讨论】:

    标签: node.js typescript koa


    【解决方案1】:

    发生这种情况是因为我使用的是 Yarn PnP 并且我安装了两个不同版本的 @types/koa。一旦我向我的package.json 添加了一个resolutions 字段,它强制所有其他TypeScript 定义使用相同版本的@types/koa,一切正常。

    【讨论】:

      猜你喜欢
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      • 2021-06-02
      • 2019-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多