TypeScript express router.use()参数类型与WebStorm中的参数不匹配

时间:2017-05-22 08:14:58

标签: javascript typescript webstorm

我目前正在使用WebStorm处理一个奇怪的问题(2017.1.3,这是截至2017年5月的最新版本)。

当我在TypeScript中编码并使用Express.js的Router时,WebStorm让我在下面的API用法中告诉'参数类型与参数不匹配'。

import * as express from 'express';
import {IRouter, NextFunction, Router} from "express-serve-static-core";

let router: Router = express.Router();

// works
router.get("/", () => {}); 

// complaining
router.use("/", (req, res, next) => {}); 

// complaining
router.use("/", (req: express.Response, res: express.Response, next: NextFunction) => {});

我无法弄清楚为什么WebStorm让我这么说,当我看到VSCode确实看到完全相同的代码时根本没有问题。

实际上这个代码可以用tsc完美编译,我知道我可以在WebStorm中抑制类型不匹配的抱怨。相反,我只想知道为什么会这样。

有关您的信息,express.js的类型定义如下所示

interface IRouter extends RequestHandler {
  // ... 
  use: IRouterHandler<this> & IRouterMatcher<this>;
}

interface IRouterHandler<T> {
  (...handlers: RequestHandler[]): T;
  (...handlers: RequestHandlerParams[]): T;
} 

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

// ...   

有没有人见过类似的问题?还是我错过了什么?

0 个答案:

没有答案