【发布时间】:2021-09-17 21:06:30
【问题描述】:
我正在尝试通过迭代称为路由组的对象数组来动态地将路由添加到我的 api。一个路由组可以有多个路由。
这是我的类型(RouterContext 类型来自 Oak 中间件框架):
// routes/mod.ts
type Route = {
method: string;
path: string;
handler: (ctx: RouterContext) => Promise<void>;
};
export type RouteGroup = {
group: {
prefix: string;
};
routes: Route[];
};
这是我的路由器类:
export class Router {
// imported Oak's Router class as oakRouter
router: oakRouter;
constructor() {
this.router = new oakRouter({ prefix: "/api" });
}
register(): void {
this._createRoutes(routeGroups);
}
private _createRoutes(routeGroups: RouteGroup[]) {
routeGroups.forEach(({ group, routes }) => {
routes.forEach(({ method, path, handler }) => {
this.router[method](group.prefix + path, handler); // <-- this.router[method] is underlined with an error
});
});
}
}
典型的路线如下所示:
router.get("/", (ctx) => {
ctx.response.body = "Welcome to My Oak App.";
});
但是当我使用括号表示法在 _createRoutes() 中动态添加我想要使用的 http 方法时,我收到以下错误:
Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'Router<RouteParams, Record<string, any>>'.
No index signature with a parameter of type 'string' was found on type 'Router<RouteParams, Record<string, any>>'.deno-ts(7053)
如何将 Route 类型的方法属性从字符串更改为有效的索引签名?这甚至是我需要做的吗?
【问题讨论】:
标签: typescript deno oak