TypeScript Express路线

时间:2018-02-21 11:19:57

标签: typescript express

我正在关注Building a Node.js App with TypeScript Tutorial的教程。我想分开路线。所以我尝试创建一个路径文件夹并创建一个test.ts文件,其中包含以下内容:

import {Router} from "express";

let router = Router();
router.get('/', get);
/**
 * GET /
 * @param req
 * @param res
 * @param next
 */
export async function get(req, res, next) {
    try {
        res.send("Testing...");
    } catch (err) {
        console.log('err', err);
        next(err);
    }
}

export {router};

现在我尝试在server.ts文件中使用它,如下所示:

import * as express from "express";
import * as TestRoute from './routes/test';

class App {
    public express : express.Application;

    constructor() {
        this.express = express();
        this.mountRoutes();
    }

    private mountRoutes() : void {
        const routes: express.Router = express.Router();
        routes.use('/test', TestRoute);
        this.express.use('/', routes);
    }
}

export default new App().express;

但是在这一行中routes.use('/test', TestRoute); TypeScript抛出错误:

Argument of type ... is not assignable to parameter of type 'RequestHandlerParams'. Argument of type ... is not assignable to type '(RequestHandler | ErrorRequestHandler)[]'. Property 'includes' is missing in type ... ...是我的test.ts文件的路径。

有人可以帮我识别这个错误是什么吗?你能否给我一个创建路径的基本结构,并将其包含在TypeScript应用程序中。我正在使用TypeScript 2.7。

1 个答案:

答案 0 :(得分:2)

您的问题是server.ts文件中的导入,更具体地说明了您使用该模块的方式。

如果您查看TestRoute对象,它实际上只是一个模块,其中包含您已导出的所有内容。所以你需要以某种方式访问​​router对象。这可以通过两种方式完成。

  1. 将您的服务器中的导入更改为import { router as TestRoute } from './routes/test';
  2. 或者,您可以通过将此更改为routes.use
  3. 来更改routes.use('/test', TestRoute.router);行中模块的访问方式

    任何一个选项都可以,但你只需要使用一个!