我目前正在使用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;
}
// ...
有没有人见过类似的问题?还是我错过了什么?