node.js - Node + Express 路由器 + 类型脚本 : string arg is not assignable to requesthandlerparams type

标签 node.js typescript express

我正在按照教程创建一个完整的 REST API,然后,我创建一个导出新的 Express 路由器的 TS 类:

import { Router, Request, Response, NextFunction } from 'express';


export class TourRouter {
public router: Router;

constructor() {
    this.router = Router();

    this.init();
}

public init(): void {
    this.router.get(
        '/',
        this.getTours
    );
}

private getTours(request: Request, response: Response, next: NextFunction) {
    // Some JSON
    const tours = {
        "now": "2018-09-09 18:40:00",
        "date": "2018-09-09",
        "tours": [
            {
                "time": "8",
                "places": 8,
                "isPast": false
            },
            {
                "time": "11",
                "places": 8,
                "isPast": false
            },
            {
                "time": "14",
                "places": 8,
                "isPast": false
            },
            {
                "time": "17",
                "places": 8,
                "isPast": false
            }             
        ]
    };

    response.send(tours);
}
}

const tourRoutes = new TourRouter();
tourRoutes.init();

export default tourRoutes.router;

当我想在我的 App.ts 中使用这个新路由器时,如下所示,我收到 TS 错误,并且构建失败并显示以下消息:

Argument of type 'string' is not assignable to parameter of type 'RequestHandlerParams'

使用声明是:

    private _routes(): void {
    let router = express.Router();

    router.get('/', (request, response, next) => {
        response.json({
            message: 'Hello World'
        });
    });

    this.express.use('/', router);
    this.express.use('/api/v1/tours', TourRouter);
}

就我而言,好像 TourRouter 不是我所期望的路由器,而是其他东西,但不知道为什么。我缺少什么?

问候

最佳答案

听起来您正在导入 TourRouter 类而不是实际的路由器,这是默认导出。将 import { TourRouter } from './routes/TourRouter'; 替换为 import TourRouter from './routes/TourRouter';。您可能希望使用 TourRouter 以外的名称导入路由器以避免混淆。

TypeScript 知道您传递给 this.express.use 的参数与任何有效的重载签名都不匹配,但它不知道您打算使用哪个重载签名。它(错误地)猜测了 (...handlers: RequestHandlerParams[]) => T 签名,这解释了字符串路径无法分配给 RequestHandlerParams 的奇怪错误。

关于node.js - Node + Express 路由器 + 类型脚本 : string arg is not assignable to requesthandlerparams type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52329090/

相关文章:

angular - RxJS Observables 数组以及要保存的附加数据

javascript - 将两个不同 typescript 类型的响应合并到一个列表中

typescript - 如果不能动态更改对象的类怎么办?

node.js - Express JS 4.0 命令行工具不工作

linux - 无法提供端口 80 express.js 反向代理 nginx

node.js - Angular 和 Express - 文件结构

json - 如何使我的存储库成为 package.json 中的依赖项并让它提示我输入信息?

javascript - 基本问题 React 与 Express 动态表

javascript - Nodejs 调用函数

node.js - Node 版本管理器在 M1 Macbook Air 上运行非常慢