扩展“命名路由”的 Express JS 路由器 TypeScript 定义
Extend Express JS router TypeScript definition for “named-routes”
我们在 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'.
尝试将其包装在名为 '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
.
在 DefinitelyTyped 上提供了打字
我们在 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'.
尝试将其包装在名为 '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
.