2017-03-02 9 views
2

ノード/エクスプレスプロジェクトにタイプを追加することに少し苦労しています。Typescript 2.2 Express req、暗黙のうちにres

私は活字体2.2とエクスプレス4.xを使用していると私はNPM経由のタイプをインストールしている:

npm install --save-dev @types/express

import * as express from "express" 

const app: express.Application = express() 

app.get("/hello", (req, res) => { 
    res.send("world") 
}) 

これは私に与える:

src/app.ts(33,22): error TS7006: Parameter 'req' implicitly has an 'any' type. 
src/app.ts(33,27): error TS7006: Parameter 'res' implicitly has an 'any' type. 

を私は

(req: express.Request, res: express.Response) => {} 
すべてのリクエストハンドラでこれを行う必要がないようにしようとしています。

私の考えでは、それらを推測できるはずです。私が間違っている?それは不可能ですか?

tsconfig.json:

{ 
    "compilerOptions": { 
    "target": "es6", 
    "module": "commonjs", 
    "noImplicitAny": true, 
    "sourceMap": true, 
    "outDir": "dist", 
    "typeRoots": ["src/types", "node_modules/@types"] 
    }, 
    "include": [ 
    "src/**/*.ts" 
    ] 
} 

ありがとう!急行ライブラリのgetメソッドがあまりにもひどくオーバーロードされ

+0

'noImplicitAny'をfalseに変更するか、ルートをそれぞれ変更することができます。両方の方法で使用することはできません – Varedis

+0

私はVaredisに同意せず、あなたが書いたコードが実際に動作し、 'app.get'に型があるので、'(req、res) 'を自動的にタイプする必要があることを確認できます。 vscode(またはtypescriptを十分にハンドリングする他のエディタ)を使用している場合は、 'express.Application'の定義に行きましょう。私が考えることができるのは、何とか 'node_modules/@ types'から型を取得しないということだけです。また、 '--traceResolution'フラグをつけてtypescriptを実行してみて、エクスプレスタイプが実際に来る場所を見てください。 –

答えて

1

(デモhttps://github.com/DefinitelyTyped/DefinitelyTyped/blob/14cfa9f41c2835fcd22e7243a32b25253c310dee/express-serve-static-core/index.d.ts#L25-L40についてはこちらを参照)

interface RequestHandler { 
    (req: Request, res: Response, next: NextFunction): any; 
} 

interface ErrorRequestHandler { 
    (err: any, req: Request, res: Response, next: NextFunction): any; 
} 

type PathParams = string | RegExp | (string | RegExp)[]; 

type RequestHandlerParams = RequestHandler | ErrorRequestHandler | (RequestHandler | ErrorRequestHandler)[]; 

interface IRouterMatcher<T> { 
    (path: PathParams, ...handlers: RequestHandler[]): T; 
    (path: PathParams, ...handlers: RequestHandlerParams[]): T; 
} 

RequestHandlerParamsは不可能持っているものreqresについて確実に確認するために行っています。提案:今すぐ注釈を付けてください

関連する問題