当前位置: 首页 > 面试题库 >

使用Typescript扩展Express Request对象

李言
2023-03-14
问题内容

我正在尝试添加一个属性以使用Typescript从中间件表达请求对象。但是我不知道如何向对象添加额外的属性。如果可能的话,我宁愿不使用括号符号。

我正在寻找一种解决方案,允许我编写与此类似的内容(如果可能):

app.use((req, res, next) => {
    req.property = setProperty(); 
    next();
});

问题答案:

您想要创建一个自定义定义,并在Typescript中使用一个称为声明合并的功能。这是常用的,例如在中method- override

创建一个文件custom.d.ts,并确保将其包含在您tsconfig.json的-部分中(files如果有)。内容如下所示:

declare namespace Express {
   export interface Request {
      tenant?: string
   }
}

这将允许您在代码中的任何时候使用如下代码:

router.use((req, res, next) => {
    req.tenant = 'tenant-X'
    next()
})

router.get('/whichTenant', (req, res) => {
    res.status(200).send('This is your tenant: '+req.tenant)
})


 类似资料:
  • 我有一个节点。js应用程序,将一些配置信息附加到对象: TypeScript 编译器不喜欢这样,因为 类型没有名为 的对象: TS2339:类型“Global”上不存在属性“myConfig”。 我不想这样做: 我如何扩展< code>Global类型以包含< code>myConfig或者只是告诉TypeScript闭嘴并相信我?我更喜欢第一个。 我不想更改中的声明。我看到了这篇SO帖子,并尝试

  • 问题内容: 我有一个node.js应用程序,该应用程序将一些配置信息附加到该对象: TypeScript编译器不喜欢这样,因为该类型没有名为的对象: TS2339:类型“ Global”上不存在属性“ myConfig”。 我不想这样做: 如何扩展类型以包含或只是告诉TypeScript关闭并信任我?我希望第一个。 我不想更改其中的声明。我看到了这样的帖子,并尝试了这个: 作为扩展现有接口的一种方

  • 我在挣扎。 当扩展一个类时,我可以很容易地向它添加一些新属性。 但是,当我扩展基类时,如果我想向基类的对象(简单对象的属性)添加新属性,该怎么办? 下面是一个带有一些代码的示例。 基类 派生类 现在,正如您可以从行内注释中看到的,这将激怒TypeScript。但这在JavaScript中工作。那么,实现这一目标的正确方法是什么呢?如果没有,问题是在我的代码模式本身吗?什么模式适合这个问题? 也许您

  • 问题内容: Typescript总是抱怨调色板中缺少某些属性。如果添加,我的应用程序运行正常,但显然我想避免这种情况。我是Typescript的新手,这是我尝试过的。 这会引发错误, 对我来说这是一个令人困惑的错误,因为类型I不在任何地方使用该类型。 如何在此处适当扩展调色板? 问题答案: 解 参考 如果我们看一下createMuiTheme.d.ts 我们会发现这一点,并发挥不同的作用。 主题:

  • 我想使用打字稿从材料-用户界面扩展按钮组件的道具,以便能够将额外的道具传递给它的孩子。 我尝试在中添加以下声明。/app/types/material_ui.d.ts: 这将引发错误“TS2693:'Button'仅引用一种类型,但在此处用作值。 我也试过声明: 这将引发错误“TS2323:无法重新声明导出的变量'按钮'”。 我的tsconfig.json是这样的: 最后是来自Menty-UI的原

  • 属性的简洁表示法 ES6允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。 var foo = 'bar'; var baz = {foo}; baz // {foo: "bar"} // 等同于 var baz = {foo: foo}; 上面代码表明,ES6允许在对象之中,只写属性名,不写属性值。这时,属性值等于属性名所代表的变量。下面是另一个例子。 function f(