Typescript错误:types'Request'中不存在属性'user'

我在快递应用程序中有以下一段代码

router.get('/auth/userInfo', this.validateUser, (req, res) => { res.json(req.user); }); 

而我的IDE似乎在抱怨错误

错误TS2339:“请求”types中不存在属性“用户”。

当我编译我的打字稿代码似乎是抛出这个错误。 任何想法为什么发生这种情况?

我们有一个用Express和Typescript编写的大型API,这就是我们处理这种情况的方法:

我们将请求定义保存在一个文件中:

 import { Request } from "express" export interface IGetUserAuthInfoRequest extends Request { user: string // or any other type } 

然后在我们正在编写控制器function的文件中:

 import { Response } from "express" import { IGetUserAuthInfoRequest } from "./definitionfile" app.get('/auth/userInfo', validateUser, (req: IGetUserAuthInfoRequest, res: Response) => { res.status(200).json(req.user); // Start calling status function to be compliant with Express 5.0 }); 

请注意,“用户”不是本地在Express请求对象中可用的属性。 确保您正在使用将这种属性添加到请求对象的中间件。

req可能是从“express”包中inputRequest,而用户在那里不存在。 您必须扩展请求与自己的路由器处理程序或强制input任何或对象。

尝试res.json(req['user'])res.json( (<any>req).user )

您也可以使用模块/全局增强

 declare module "express" { // declare module "express-serve-static-core" export interface Request { user: any } } 

您也可以制作自己的处理程序包装器(而不是在ExpressJ中扩展路由器function)。

 import * as express from 'express'; interface IUserRequest extends express.Request { user: any } function myHandler(handler: (req: IUserRequest, res: express.Response, next?: express.NextFunction) => any) { return (req: express.Request, res: express.Response, next: express.NextFunction) => { try { validateUser(req, res, (err) => { // your validateUser handler that makes a user property in express Request if(err) throw err; let requestWrapper: IUserRequest = <IUserRequest>req; handler(requestWrapper, res, next); }) } catch (ex) { next(ex); } } } let app = express(); // init stuff for express but this.validateUser handler is not needed app.use('/testuser', myHandler((req, res) => { res.json(req.user); }));