扩充现有接口

时间:2016-08-07 18:07:54

标签: node.js typescript koa

即使所有代码都使用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;
}

但这可能是错误的做法,因为它不起作用 怎么办呢?
感谢。

2 个答案:

答案 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