添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Typescript 声明合并 Express 请求对象和 Passport.js 用户/会话

typescript express types passport.js typescript-typings
发布时间:2021-04-13 14:58

我在 express/nodejs 应用程序中使用passportjs 中间件进行身份验证。尽管按照 Declaration Merging 的步骤操作,但我的 request.user 对象的属性出现错误。

我在我的项目根目录中的 /types/index.d.ts 创建了一个文件,并将以下内容添加到我的 tsconfig.json

"typeRoots": [
  "/types/index.ts", "node_modules/@types"

我的全局声明合并如下所示:

import { User } from "../users/user.interface";
declare global {
  namespace Express {
    export interface Request {
        user: User;

** 更新 ** 通过将我的声明合并更改为模块增强,我已经使 req.user 对象停止抛出错误:

import { User } from "../users/user.interface";
declare module "express-serve-static-core" {
    interface Request {
        user: User;

引用 request.session 对象时出现以下错误:Property 'session' does not exist on type 'Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>'.

passport 的@types/passport 类型不应该与 express 的请求对象合并以添加会话吗?

有谁知道我如何成功消除这些错误/让 TS 识别此声明合并。我是打字稿的新手,已经能够解决我遇到的大部分问题,但这个问题只是不断浮出水面。

要扩展 Passport 使用的 User 类型,您需要将声明合并到 global.Express.User 中:

declare global {
  namespace Express {
    interface User {
        /* declare your properties here */

@types/passport 提供的类型定义没有定义 global.Express.Request#session,而是由 @types/express-session here 定义。

  • Focus模板网(Focus666.com)是专业的网站网页模板下载站,提供Bootstrap模板、Html5模板、html静态网页模板、主流cms等模板下载,同时提供各种编程技术文章。
  • 粤ICP备20051068号
  • 注册/登录页
  • Echarts示例图
  • javascript
  • jquery
  • python
  • node.js
  • laravel
  • vue.js
  • reactjs
  •