Expressのルーティングを下記のようにmethod
, path
, action
プロパティを持つオブジェクトの配列AppRoutes
をループさせて実現するコードをGitHubレポジトリで見つけたのですが、app[route.method]
の箇所でTypeScriptのコンパイルエラーが発生します。
route.method
の型が特定できないことが原因ではないかと思うのですが、このエラーを回避する方法はないでしょうか?
###該当のコード
index.ts
index.ts
1import express from 'express'; 2import { Request, Response } from 'express'; 3import { AppRoutes } from './routes'; 4 5const startServer = async () => { 6 const app = express(); 7 app.use(express.json()); 8 9 AppRoutes.forEach((route) => { 10 app[route.method]( 11 route.path, 12 (request: Request, response: Response, next: Function) => { 13 route 14 .action(request, response) 15 .then(() => next) 16 .catch((err) => next(err)); 17 } 18 ); 19 }); 20 21 app.listen(3000); 22 console.log('Express application is up and running on port 3000'); 23}; 24 25startServer(); 26
routes.ts
import {postGetAllAction} from "./controller/PostGetAllAction"; import {postGetByIdAction} from "./controller/PostGetByIdAction"; import {postSaveAction} from "./controller/PostSaveAction"; /** * All application routes. */ export const AppRoutes = [ { path: "/posts", method: "get", action: postGetAllAction }, { path: "/posts/:id", method: "get", action: postGetByIdAction }, { path: "/posts", method: "post", action: postSaveAction } ];
###発生しているエラー
error
1型 'string' の式を使用して型 'Express' にインデックスを付けることはできないため、要素は暗黙的に 'any' 型になります。 2型 'string' のパラメーターを持つインデックス シグネチャが型 'Express' に見つかりませんでした。
あなたの回答
tips
プレビュー