扩展“命名路由”的Express JS路由器打字稿定义



我们使用的是一个名为"指定路由"的扩展名,其过去对我们有很好的服务。现在,我们正在逐步使用打字稿,即使我们的代码库,我们将面临以下问题:该模块扩展了Express的路由器对象,因此路由可以具有标识符:

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

当然,Express键入不知道该可选标识符并报告编译错误。我遵循"模块增强"的说明,并创建了以下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'.

尝试将其包装在一个名为'named-routes'的模块中:

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;
    }
  }
}

更新:我已经在@types/named-routes上肯定地进行了打字。

相关内容

  • 没有找到相关文章

最新更新