【发布时间】:2018-10-31 01:23:14
【问题描述】:
我正在使用 Passport 处理 Express 应用程序的身份验证。这会将用户设置为 Express 响应。我使用的是 TypeScript,因此在路由定义中将请求类型设置为 Request 会出错,因为 Express Request 中不存在用户对象。有很多关于扩展请求的问题,declaration merging 或extending the interface 但这些会导致另一个错误。我的文件如下所示:
import { Router, Request, Response } from 'express'
import { User as CustomUser } from './user'
interface IRequest extends Request {
user: CustomUser
}
const router: Router = Router()
router.get('/', requiresLogin, (req: IRequest, res: Response) => {
console.log(req.user)
res.sendStatus(204)
})
但现在我在快速回调中得到以下 TypeScript:
Argument of type '(req: IRequest, res: Response) => void' is not assignable to parameter of type 'RequestHandlerParams'. Type '(req: IRequest, res: Response) => void' is not assignable to type '(RequestHandler | ErrorRequestHandler)[]'. Property 'includes' is missing in type '(req: IRequest, res: Response) => void'.
我最近升级到 TypeScript v2.8.3,以前从未遇到过问题。
【问题讨论】:
-
您使用的是哪个版本的
@types/express?我刚刚用 TypeScript 2.8.3 和 Express 类型 4.11.1 尝试了上面的代码,并没有得到任何编译器错误。 -
我正在使用
@types/expressv4.11.1 和expressv4.16.3。据我所知,tsconfig.json中没有任何内容会导致问题(例如,我没有指定typeRoots。 -
requiresLogin的签名是什么样的? -
我遇到了与 2.8.1 类似的问题
-
您找到解决方案了吗?我正在使用 TypeScript v3.4.5 和 @types/express 4.17.0 并看到同样的问题
标签: typescript express passport.js typescript2.0