我正在使用Restify(如果您不知道Restify,请将其视为Express.js),我想将一个对象附加到请求对象,以便我可以通过以下路径访问它。
一个更具体的例子:
export const validate: ValidateFn = async (req: Request, res: Response, next: Next): Promise<void> => {
// Validate and parse token from headers
const authHeader: string = req.header('authorization', null);
const parsedToken: string = parseBearerToken(authHeader);
if (parsedToken == null) { return next(new errors.InvalidCredentialsError('Missing authorization')); }
// Verify token
try {
const data: {} = jwt.verify(parsedToken, config.apiServer.jwtSecret);
req.user = data;
} catch (err) {
return next(new errors.NotAuthorizedError('Invalid authentication'));
}
return next();
};
在此行中
req.user = data;
typescript显然在对我大喊大叫,因为没有调用
user
在给定的请求对象上。我认为理想情况下,我可以简单地扩展类型的定义
Request
在restify名称空间中,以便它仍然可以使用相同的名称,但具有其他属性
user: {};
.
我也可以创建一个新类型(如
RequestValidated
),但我当然希望它可用于整个库名称空间(无其他导入)。
所以我的问题总结为一句话:
如何扩展第三方库的定义以添加自定义更改(如附加到
要求
对象),以便它可用于相同的命名空间,而无需编辑原始键入文件(它们是定义类型的repo的一部分)?