我正在尝试实现一个通过jwt令牌进行身份验证的express API,并且我正在使用express-jwt中间件来验证对方法的访问:
import express from 'express'
import jwt from 'express-jwt'
const app = express()
app.get('/protected', jwt({ secret: 'jwtSecret', algorithms: ['HS256'] }), prot)
const prot = (
req: express.Request,
res: express.Response,
_next: express.NextFunction
): void => {
res.json({
msg: req.user,
})
}
app.listen(3000)但是我得到了这个错误:
Property 'user' does not exist on type 'Request<ParamsDictionary, any, any, ParsedQs>'.ts(2339)
我试过附加req: express.Request & { user: unknown },但是函数不再适合express。
我能在这里做些什么。如果情况变得更糟,我能不能以某种方式告诉TypeScript闭嘴,因为我知道这个领域会在那里(即使我知道这不是TypeScript的重点)
发布于 2020-10-25 14:17:54
user不是req对象的现有属性。您可以通过在项目中创建一个.d.ts文件来为req对象创建自己的类型,例如,创建一个express.d.ts文件,该文件将包含:
declare namespace Express {
export interface Request {
user: SomeType
}
}演示:https://repl.it/repls/OldlaceWhoppingComputationalscience
尝试删除express.d.ts,错误将再次出现。
发布于 2020-12-29 06:40:23
declare global {
namespace Express {
interface Request {
user?: UserPayload;
}
}
}这是UserPaylaod的一个示例
interface UserPayload {
id: string;
email: string;
}https://stackoverflow.com/questions/64520849
复制相似问题