首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Express-jwt中间件typescript类型问题

Express-jwt中间件typescript类型问题
EN

Stack Overflow用户
提问于 2020-10-25 14:06:59
回答 2查看 2K关注 0票数 4

我正在尝试实现一个通过jwt令牌进行身份验证的express API,并且我正在使用express-jwt中间件来验证对方法的访问:

代码语言:javascript
复制
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的重点)

EN

回答 2

Stack Overflow用户

发布于 2020-10-25 14:17:54

user不是req对象的现有属性。您可以通过在项目中创建一个.d.ts文件来为req对象创建自己的类型,例如,创建一个express.d.ts文件,该文件将包含:

代码语言:javascript
复制
declare namespace Express {
   export interface Request {
       user: SomeType
   }
}

演示:https://repl.it/repls/OldlaceWhoppingComputationalscience

尝试删除express.d.ts,错误将再次出现。

票数 1
EN

Stack Overflow用户

发布于 2020-12-29 06:40:23

代码语言:javascript
复制
declare global {
  namespace Express {
    interface Request {
      user?: UserPayload;
    }
  }
}

这是UserPaylaod的一个示例

代码语言:javascript
复制
  interface UserPayload {
     id: string;
     email: string;
   }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64520849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档