当前位置: 首页 > 知识库问答 >
问题:

TypeScript:扩展Express。具有自己类的会话接口

甘祺
2023-03-14

我正在处理一个带有npm包的Types cript项目。我想向Express添加一个属性。会话接口。

示例类:

class User {
    name: string;
    email: string;
    password: string;
}

export = User;

接口定义的新d.ts文件(不想编辑express-session.d.ts):

declare namespace Express {
    interface Session {
        user: User
    }
}

app.ts

import User = require('./User');

function (req: express.Request, res: express.Response) {
    req.session.user //I want to use it like this.
}

问题是,用户在de d.ts文件中未知。但既不需要也不导入用户文件来修复这一问题。

如何将自己的类添加到会话界面?

共有3个答案

蒋向笛
2023-03-14

对于我来说,类型。快速会话。d、 ts:

declare namespace Express {
    interface CustomSessionFields {
        myCustomField: string
    }

    export interface Request {
        session: Session & Partial<SessionData> & CustomSessionFields
    }
}

这个答案与这个帖子有关

曾宏毅
2023-03-14

虽然有点晚了,但应该可以将您的接口导入到定义文件中

import { User } from '../models/user';

declare global {
  namespace Express {
    interface Session {
      _user?: User
    }
  }
}
许子平
2023-03-14

可能是由于软件包版本的原因,Vitalii Zurian提供的答案不适用于我。如果您想在req上扩展会话数据。并通过TSC类型检查,您应该扩展SessionData接口。

例如。

<代码>用户。ts:

class User {
  name: string = '';
  email: string = '';
  password: string = '';
}

export = User;

app.ts

import express from 'express';
import User from './User';

declare module 'express-session' {
  interface SessionData {
    user: User;
  }
}

function controller(req: express.Request, res: express.Response) {
  req.session.user;
}

软件包版本:

json prettyprint-override">"express": "^4.17.1",
"express-session": "^1.17.1",
"@types/express-session": "^1.17.3",
"@types/express": "^4.17.11",
"typescript": "^3.9.7"

结果:

 类似资料:
  • 问题内容: 我正在阅读另一个SO问题,即Swift do-try-catch语法。在他的回答中, rickster 为OP的自定义类创建了扩展。 Konrad77 评论说,这是“保持代码整洁的好方法。” 我尊重他们的知识,这使我相信我在自己的代码中遗漏了一点。 除了为我创建的类创建扩展之外,还有其他好处(除了整洁)还是原因?我可以将相同的功能直接放入类中。如果我是唯一使用该类的人,或者其他人将使用

  • 我正试图用三个额外的日期(时间戳)字段扩展扩展扩展名(新闻),并希望在(新闻)的fluidtemplate中调用这些字段。 我已经连线到目前为止,我可以看到我的后端额外的字段,而无需选择一个外部类型-我已经相应地修改了ext_tables.php,并可以保存数据。 现在,我试图在我的新闻流模板中使用这些字段,在我的Partials/List/Item中使用以下代码。html-{newsItem.d

  • 我想创建一个自定义的树数据结构,只有节点,我可以迭代他们。然后,我可以扩展这个类,并有非常基本的树 我已经开始工作了,但是当我试图扩展Node类时,问题就来了。对于扩展类,继承的迭代器方法仍然返回节点迭代器,这意味着我每次都要强制转换。下面是我遇到的问题的一个基本示例。让我们建立一个包含整数的树: 是否有一种简单的方法可以解决这个问题,而不需要将iterator()方法从Node类复制到Integ

  • 问题内容: 我正在尝试添加一个属性以使用Typescript从中间件表达请求对象。但是我不知道如何向对象添加额外的属性。如果可能的话,我宁愿不使用括号符号。 我正在寻找一种解决方案,允许我编写与此类似的内容(如果可能): 问题答案: 您想要创建一个自定义定义,并在Typescript中使用一个称为声明合并的功能。这是常用的,例如在中。 创建一个文件,并确保将其包含在您的-部分中(如果有)。内容如下

  • 这个问题已经被问了好几次了,但没有一个答案对我有效。我试图扩展Express请求对象,使其包含一个属性来存储用户对象。我创建了一个声明文件,

  • 问题内容: 假设我们需要使用一个名为“ BaseNode”的类来实现不同类型的树,从该类派生其他类型的Node,并且它假定具有一个自己类型的实例变量,通常看起来像这样: 现在,如果我要为具有更多成员的AVL树派生Node: 原始(&)节点成员仍然会类型我实施AVL树,其防止。谁能告诉我如何解决这一继承问题?谢谢! 问题答案: 解决方案1- 每次访问时,都将其转换为。您可以在其中编写访问器以使其更加