Definitelytyped: エクスプレスタイピングはミドルウェアを詰まらせるようです

作成日 2018年05月30日  ·  3コメント  ·  ソース: DefinitelyTyped/DefinitelyTyped

  • [√] @types/xxxxパッケージを使用しようとしましたが、問題が発生しました。
  • [√] tscの最新の安定バージョンを使用してみました。 https://www.npmjs.com/package/typescript
  • [√] StackOverflowに不適切な質問があります。
  • [√] [メンション](https://github.com/blog/821-mention-somebody-they-re-notified)作成者( index.d.ts Definitions by:index.d.ts )応答。

    • 著者: @borisyankov @ 19majkel94 @kacepe @micksatana @samijaber

@ types / express4.11.1とTSC2.8.3を使用して現在問題が発生しています。

次のコードはコンパイルできません。

function aMiddleware(req: Request, res: Response, next: NextFunction) {
    next();
}

app.get('/foo/bar', aMiddleware);

次のエラーが発生します。

TS2345: Argument of type '(req: Request, res: Response, next: NextFunction) => void' is not assignable to parameter of type 'RequestHandlerParams'.
  Type '(req: Request, res: Response, next: NextFunction) => void' is not assignable to type '(RequestHandler | ErrorRequestHandler)[]'.
    Property 'includes' is missing in type '(req: Request, res: Response, next: NextFunction) => void'.

最も参考になるコメント

こんにちはジミー、

このようにインポートする必要があります...

import { Express, Request, Response, NextFunction } from 'express';
const express = require('express');

const app: Express = express();

function aMiddleware(req: Request, res: Response, next: NextFunction) {
    next();
}

app.get('/foo/bar', aMiddleware);

その理由は、Node.jsのRequestResponseNextFunctionがExpressと同じではないためです。

お役に立てれば。

全てのコメント3件

こんにちはジミー、

このようにインポートする必要があります...

import { Express, Request, Response, NextFunction } from 'express';
const express = require('express');

const app: Express = express();

function aMiddleware(req: Request, res: Response, next: NextFunction) {
    next();
}

app.get('/foo/bar', aMiddleware);

その理由は、Node.jsのRequestResponseNextFunctionがExpressと同じではないためです。

お役に立てれば。

ありがとう、やってみます!

これはうまくいきます。 どうもありがとうございました。

このページは役に立ちましたか?
0 / 5 - 0 評価