質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Q&A

0回答

412閲覧

Expressのルーティングを配列ループで実現したい

maskmelon

総合スコア63

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

0グッド

0クリップ

投稿2021/01/13 05:55

編集2021/01/16 23:37

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' に見つかりませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

A_kirisaki

2021/01/14 09:48

routes はどんな感じですか?
maskmelon

2021/01/16 23:39

間が空いてしまい申し訳ありません。 routes.tsのコードを追加しました。
uraway_

2021/01/20 08:27 編集

expressと@types/expressの正確なバージョンはいくつでしょうか?また、tsconfig.jsonの中身はどうなっていますか?strict: trueでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問