node.js - 扩展 “named-routes” 的 Express JS 路由器 TypeScript 定义

标签 node.js typescript express named-routing

我们正在使用名为 named-routes 的扩展程序Express 过去为我们提供了很好的服务。现在我们正在逐步对代码库进行 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'

但这仍然给我一个错误 TS2345:“my.route.name”类型的参数不能分配给“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;
    }
  }
}

关于node.js - 扩展 “named-routes” 的 Express JS 路由器 TypeScript 定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48889291/

相关文章:

mysql - Nodejs异步: return mysql query result in for loop

reactjs - React 类组件有属性,但 Typescript 说没有

javascript - 使用 multer 上传多个文件失败

node.js - 在 express 中添加故意延迟

html - 将 connect.sid 存储在 localStorage 而不是 cookie

node.js - WAMP.ws : How to manage security and privacy?

node.js - Node中的类中不能定义const吗?

node.js - 结帐页面中未定义 stripeToken 和 chargeAmount

Angular - 在 Http.post 中接收并返回 Observable<T> 响应

javascript - TypeScript 错误导入 vue 包 (vue-cli3 proj)