如何为使用async / await的快速中间件定义返回值?我尝试了一些不同的东西,但没有太多运气。
我还试图重载Request对象,以便在解码JWT有效负载时允许定义req.user。
import { NextFunction, Request, RequestHandler, Response } from 'express'
const authenticate: RequestHandler = async (req: IUserRequest, res: Response, next: NextFunction): Promise<void> => {
if (! req.headers.authorization) { return next(new ValidationError()) }
const payload: IUserData = await decodeJwt(req.headers.authorization)
req.user = payload
return next()
}
export interface IUserRequest extends Request {
user: IUserData
}
/* errors
(req: IUserRequest, res: Response, next: NextFunction) => Promise<void>' is not assignable to type 'RequestHandler'.
Types of parameters 'req' and 'req' are incompatible.
Type 'Request' is not assignable to type 'IUserRequest'.
Property 'user' is missing in type 'Request'.
*/
答案 0 :(得分:2)
Request
和IUserRequest
类型不兼容,因为user
中缺少Request
。在分配给req
之前,该属性可能不会出现在export interface IUserRequest extends Request {
user?: IUserData
}
中。
应该是:
var obj1 = {
test: 0
};
var obj2 = Object.assign({}, obj1);
obj2.test = 2;
console.log(obj1, obj2);