【问题标题】:Extend Express JS router TypeScript definition for “named-routes”为“命名路由”扩展 Express JS 路由器 TypeScript 定义
【发布时间】:2018-02-20 15:58:02
【问题描述】:

我们在 Express 中使用了一个名为 named-routes 的扩展程序,它在过去为我们提供了很好的服务。现在我们正在逐步对我们的代码库进行 TypeScript 化,我们面临以下问题:该模块扩展了 Express 的路由器对象,因此路由可以具有标识符:

router.get('/admin/user/:id', 'admin.user.edit', (req, res, next) => …

Express 类型当然不知道这个可选标识符并报告编译错误。我按照“Module Augmentation” 的说明创建了以下express-named-routes.d.ts

import { IRouterMatcher } from 'express';
import { PathParams, RequestHandlerParams } from 'express-serve-static-core';

declare module 'express' {
  export interface IRouterMatcher<T> {
    // copied from existing decl. and added the `name` argument
    (path: PathParams, name: string, ...handlers: RequestHandler[]): T;
    (path: PathParams, name: string, ...handlers: RequestHandlerParams[]): T;
  }
}

当然也导入到相应的文件中:

 import '../types/express-named-routes'

但这仍然给了我一个error TS2345: Argument of type '"my.route.name"' is not assignable to parameter of type 'RequestHandlerParams'.

【问题讨论】:

  • 您能分享您的express-named-routes.d.ts 或将其提交给DefinitelyTyped 吗?
  • @Forseti 是的,我会的。我目前正在休假,直到月底,但我提醒自己。感谢您的耐心等待。
  • 祝你假期愉快 :) 我问是因为我的答案解决方案不起作用,我想知道我是否错过了更大的范围或其他东西。我对 TypeScript 很陌生,所以这是可能的 :)
  • @Forseti 成功完成了打字——请随时查看有关“DefiniteTyped”的 PR:github.com/DefinitelyTyped/DefinitelyTyped/pull/26403

标签: node.js typescript express named-routing


【解决方案1】:

更新:我已经通过@types/named-routes在DefiniteTyped上提供了打字。

【讨论】:

    【解决方案2】:

    尝试将它包装在一个名为“命名路由”的模块中,如下所示:

    declare module 'named-routes' {
      import { IRouterMatcher } from 'express';
      import { PathParams, RequestHandler, RequestHandlerParams } from 'express-serve-static-core';
    
      module 'express-serve-static-core' {
        export interface IRouterMatcher<T> {
        // copied from existing decl. and added the `name` argument
          (path: PathParams, name: string, ...handlers: RequestHandler[]): T;
          (path: PathParams, name: string, ...handlers: RequestHandlerParams[]): T;
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-16
      • 1970-01-01
      • 2016-07-03
      • 2016-04-11
      • 2021-03-14
      • 1970-01-01
      相关资源
      最近更新 更多