Typescript:属性“已解码”在types请求中不存在

我在JavaScript中有这样的代码:

if (token) { // verifies secret and checks exp jwt.verify(token, Config.Secret, function(err, decoded) { if (err) { return res.json({ success: false, message: 'Failed to authenticate token.' }); } else { // if everything is good, save to request for use in other routes req.decoded = decoded; next(); } }); } else { // if there is no token // return an error return res.status(403).send({ success: false, message: 'No token provided.' }); } 

想要重写它到打字稿,但得到一个错误Property decoded does not exists on type Request

任何想法如何解决?

您将需要使用声明合并来为自定义Request字段添加types定义。 为此,请创build如下所示的.d.ts文件:

 declare module Express { export interface Request { decoded: string; // etc. } } 

并将其添加到编译上下文中,以便编译器将types定义与express.d.ts的types定义合并。

如果你不想创build一个新的类扩展请求,你可以访问请求作为一个对象,如:

 req['decoded'] = decoded; 

如果它仍然向你投掷,你可能不得不把req作为一个对象(打字稿):

 (<Object>req)['decoded'] = decoded; 

你甚至可以投reqinput任何和访问解码属性(typescript):

 (<any>req).decoded = decoded; 

即使可能,我也不会合并来自同名模块的接口。 我宁愿创build一个新的自定义界面,你甚至可以在你正在使用它的文件中声明。 (否则,只是出口)

 import {Request, Response} from "express"; interface CustomRequest extends Request { decoded: string; } 

这更清洁,而且更接近OOP。