即使所有代码都使用koa,我也不是一个特定的koa问题,我只是节点和模块系统的新手。
使用Koa时,每个请求都由Request
interface:
declare module "koa" {
namespace Koa {
...
export interface Request {
...
}
...
}
...
namespace Koa {}
export = Koa;
}
我使用了bodysarser中间件,所以Request
有一个名为body
的属性但是typescript不知道这个,所以我试图通过添加这个定义文件来添加参考:
/// <reference path="globals/koa/index.d.ts" />
/// <reference path="koa.d.ts" />
import koa = require("koa");
...
app.use(ctx => {
console.log(ctx.request.body); // error: Property 'body' does not exist on type 'Request'
});
koa.d.ts
的位置:
declare module "koa" {
namespace Koa {
export interface Request {
body: any;
}
}
export default Koa;
}
但这可能是错误的做法,因为它不起作用
怎么办呢?
感谢。
答案 0 :(得分:1)
我只需要解决这个问题。我将此添加到custom-typings.d.ts
:
import {Request} from "koa";
declare module "koa" {
interface Request {
body: any;
}
}
答案 1 :(得分:1)
刚碰到这个。我发现,由于我使用的是koa-bodyparser中间件,我需要安装@ types / koa-bodyparser模块,为你增加界面 - https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/koa-bodyparser/index.d.ts#L20。
import * as bodyparser from 'koa-bodyparser';
...
app.use(bodyParser());
然后,在您的路线中,“body”将在请求对象上可用。
ctx.request.body