如何使用@types/express-session?

2024-04-19

当我写这个时:

import { Request } from 'express-serve-static-core';

router.post((req: Request, res, next) => {
  req.session.user = user;
}

tsc给我一个错误:

'对象可能'未定义'。

我知道原著Request类型没有session field.

I check @types/express-session index.d.ts文件,发现这个:

declare global {
  namespace Express {
    interface Request {
      session?: Session;
      sessionID?: string;
    }
  //....
}

所以我想添加额外的字段session and sessionID键入req.

我该如何使用?像这样:req: Request & ExpressSessionRequest.

So the req都会有原来的Request类型和额外字段类型@types/express-session add.


问题不在于这个Request没有session or sessionID属性 -- 的类型express-session已经将属性添加到Request接口通过声明合并 https://www.typescriptlang.org/docs/handbook/declaration-merging.html#merging-interfaces.

该错误来自转动strictNullChecks编译器选项打开。由于属性session在类型定义中被声明为可为空,编译器会准确地警告您。如果你确定req.session不为 null 或 undefined,您可以使用非空断言运算符 https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-0.html#non-null-assertion-operator (!) 来抑制错误:

router.post((req: Request, res, next) => {
    req!.session!.user = user;
})

或者显式检查 null|undefined:

router.post((req: Request, res, next) => {
    if (req.session) {
        req.session.user = user;
    }
})

如果你想使session and sessionID属性不可为空,那么您可以编写自己的自定义类型:

type YourSessionRequest = Request & {
    session: Express.Session;
    sessionID: string;
}
router.post((req: YourSessionRequest, res, next) => {
    req.session.user = user;
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用@types/express-session? 的相关文章

  • 使用字符串枚举来扩展 keyof

    我在理解使用字符串枚举来索引类型时的行为时遇到了一些困难 似乎有时 TS 会识别字符串枚举的值是keyof某些类型 有时则不然 为了显示 enum Key FOO foo type MyObj foo string 因此 类型属性的枚举 即
  • 如何强制泛型

    有没有办法在打字稿中将泛型标记为强制 function onSubmit
  • ionic2 对菜单项应用 ngx-translate

    我正在使用 ngx translate 来支持多语言 并且运行良好 但我也想申请菜单项 我该如何实现这一目标 我有 3 个菜单项 我想更改每个标题的语言 ts file appPages PageObj title Profile comp
  • TypeScript 代码上的 JSlint - 它还能教我编写更好的代码吗?

    在 TypeScript 生成的代码上使用 JSlint 还能教我编写更好的代码吗 如果是 您能提供一两个例子吗 Thanks 没有 由于生成的 javascript 在不良打字稿 良好打字稿之间是一致的 例如缺少分号 对于打字稿 有一个
  • 添加 PayPal 付款方式 Ionic

    我正在尝试在我的用 Ionic 2 3 制作的应用程序上实现 PayPal 付款方式 我已经安装了 ionic cordova plugin add com paypal cordova mobilesdk npm install save
  • 如何在 Angular @Input 中仅接受预定义值

    我的问题是 我在 a 中收到一个字符串值作为组件的参数 但我想限制可以用作参数的值 就像enum I use Input type string 但是在组件中 一切都可以引入type正如我之前所说 我需要将其限制为 3 个选项 例如Enum
  • FullCalendar-vue + Typescript:属性“getApi”不存在

    我尝试将 FullCalendar vue 与 Typescript 结合使用 但在访问其 API 时遇到错误 我的日历设置如下
  • 从回调中访问状态

    我在从回调访问组件状态时遇到问题 国家的价值num更改正确 但此类更改对于加载时定义的回调函数不可见 import React useState from react class MyObject callback gt void cons
  • 使用属性和泛型类型获取“keyof”中项目的类型

    我想定义一个具有泛型类型的接口 该接口必须接受一个对象 其键作为 根字段名称 值作为对象数组 该数组定义一些子字段 其键作为子字段的名称 type 作为字段值的类型 像这样的东西 interface Inputs emails email
  • 类型 {} 上不存在 Typescript 属性

    我有以下代码打字稿 为什么编译器会抛出错误 var object Object defineProperty object first value 37 writable false enumerable true configurable
  • 在 Angular 单个组件中导入第 3 方 javascript 库

    我目前正在开发 Angular4 应用程序 我想import some JavaScript 库 but 仅针对单个组件 目前我可以通过在里面定义它们的路径来轻松导入这个库 angular cli json像那样 scripts node
  • Typescript:隐式无参数函数类型

    我想要作为参数给出的函数的限定类型 我希望这种类型要么是一个没有参数的函数 返回一个包含参数的 void 函数 动作 要么是它返回自身的 void 函数 这是我想使用的代码 interface JsonArray extends Array
  • 角度 2 通道数组到自定义验证器(模板驱动形式)

    我需要将一个对象数组传递给 a2 自定义验证器 然后我想根据该数组中的记录验证模板驱动表单字段的值 但是我无法检索验证器内的对象 我唯一能看到的是它的名称作为字符串 如有任何帮助 我们将不胜感激
  • CSF3 中的 Typescript 支持

    我正在使用 CSF3 编写故事 并且我想正确注释我的故事 我用谷歌搜索过 基本上找不到答案 我尝试过一些技巧here https github com storybookjs storybook issues 7677但没有任何效果 我发现
  • 是否有任何有角度的日期前管道?

    我正在尝试创建帖子共享网站 我想以角度创建日期前管道 import Pipe PipeTransform from angular2 core Pipe name messageTime pure false export class Me
  • Next.js TypeScript 错误:您没有安装所需的软件包[重复]

    这个问题在这里已经有答案了 我目前正在他们方便的 typescript starter 的帮助下构建一个基本的 nextjs 网站 使用开发时一切都运行顺利yarn dev直到大约 20 分钟前 每当我尝试运行时 我都会随机收到一条错误消息
  • RxJ 从 observable 中获取价值

    在组件中 singleEvent Observable
  • 枚举类型在打字稿中给出双数组

    我想从枚举数据类型创建一个下拉列表 但是当我尝试将枚举更改为具有名称和值的对象时 枚举数组返回枚举成员的两倍 使用函数这个帖子 https stackoverflow com questions 18111657 how does one
  • 如何在 TypeScript 中获取源代码中的实际行号(用于自定义日志记录)

    参考文献这个问题 https stackoverflow com questions 1340872 how to get javascript caller function line number how to get javascri
  • 类型“QueryFn”中不存在“查询”|角火2

    类型参数 query limitTolast number orderByKey 布尔值 不可分配给 QueryFn 类型的参数 对象文字只能指定已知属性 并且 QueryFn 类型中不存在 query 包 json angularfire

随机推荐

  • Spring boot,禁用测试安全性

    我使用 Spring Boot 版本 1 3 0 M5 我也尝试过版本 1 2 5 RELEASE 我添加了弹簧安全
  • 将 Google 电子表格中的范围作为电子邮件发送(格式问题)

    以下代码针对第 2 列和第 3 列中的数据发送一封电子邮件 但电子邮件中的结果并不在另一个之下 Code gs function email var ss SpreadsheetApp getActiveSpreadsheet var bu
  • 为什么 RegOpenKeyEx() 在 Vista 64 位上返回错误代码 2?

    我正在拨打以下电话 result RegOpenKeyEx key s 0 KEY READ key C Visual Studio 5 Vista 64 位 它失败并显示错误代码 2 找不到文件 即使 regedit 表明该密钥存在 此代
  • 如何调试 Firefox 开发者工具附带的 Scratchpad 中编写的 JavaScript?

    我想要一个独立的editor and debugger 基本上是一个IDE for JavaScript 我目前正在使用仅在命令行上运行独立脚本并在其中编辑它们的组合Notepad 有时还有Scratchpad进来的Firefox Deve
  • 错误:“rJava”的包或命名空间加载失败

    所以我尝试了之前对我的问题提出的答案 但我仍然有相同的错误消息 我正在尝试加载rJavaR 中的库 library rJava Error onLoad failed in loadNamespace for rJava details c
  • C# 8 使用声明范围混乱

    使用新的 C 8 using 声明语法 第二个连续的 using 语句的包含范围是什么 TL DR 在 C 8 之前 有一个连续的 using 语句 例如 using var disposable new MemoryStream usin
  • jQuery $.extend 不覆盖目标属性

    是否可以扩展对象而不覆盖已设置的属性 在下面的示例中 我正在寻找一种方法为猫添加 2 个翅膀 但保留它的 4 条腿 var cat legs 4 var bird legs 2 wings 2 some references in my a
  • 如何更改多次提交的作者和提交者姓名/电子邮件?

    如何更改一系列提交的作者 注意 此答案会更改 SHA1 因此在已推送的分支上使用它时要小心 如果您只想修复名称的拼写或更新旧电子邮件 Git 可以让您无需使用重写历史记录即可完成此操作 mailmap See 我的另一个答案 https s
  • (以编程方式)比较 PDF 的可靠方法? [复制]

    这个问题在这里已经有答案了 可能的重复 比较大量 PDF 文件的工具 https stackoverflow com questions 145657 tool to compare large numbers of pdf files 我
  • 如何在两个 boost::multi_arrays (C++) 之间执行数学运算?

    如何在两个 boost multi arrays 之间执行数学运算 添加两个值类型为 double 的数组的示例 auto array1 boost multi array
  • 使用 Fourseven:scss 在 Meteor 中加载 css

    我正在使用 fourseven scss 来编译 scss 文件 如果我包括我的 这似乎工作正常 scss客户端目录下的文件 不过我想把它们留在我的组件附近 imports ui stylesheets 或者就在组件旁边 imports u
  • 删除数组中的所有空间 javascript

    我有一个数组 需要从中删除空格 例如它返回如下 book row boat rain coat 但是 我想删除所有空白 我在网上看到的所有指南都说可以使用 replace 但似乎只适用于字符串 到目前为止 这是我的代码 function t
  • sqlalchemy mixin、外键和关系

    我在创建一个简单的 mixin 时遇到问题 我计划在一堆 sqlalchemy 声明类上使用它 基本想法是我想要一个创建 修改时间戳和一个创建 修改用户存储在多个表上 mixin 位于其自己的文件 global mixins py 中 并且
  • Task.Result 始终为 null

    我正在编写一些代码来通过 Task Factory FromAsync 在 WP7 应用程序中 执行 HttpRequest 任务的 Result 属性始终为 null 但我知道请求本身是正确的 因为如果我将其粘贴到浏览器或 Fiddler
  • 如何使用 html 5 跳转到视频位置

    我想使用 html5 video 标签来播放我的视频 如何设置视频开始播放的时间 例如我的视频长 90 秒 我想在 30 秒时开始播放
  • 程序崩溃并显示 0xC000000D 并且没有异常 - 如何调试它?

    我有一个使用第三方库的 Visual C 9 Win32 应用程序 当使用一组特定参数调用该库中的函数时 程序会崩溃并显示 异常代码 0xC000000D 我尝试附加 Visual Studio 调试器 没有抛出异常 C 也没有像访问冲突那
  • Java ExecutorService:awaitTermination所有递归创建的任务

    我用一个ExecutorService执行任务 该任务可以递归地创建提交给同一个任务的其他任务ExecutorService这些子任务也可以做到这一点 我现在遇到的问题是我想等到所有任务都完成 即所有任务都完成并且他们没有提交新任务 才继续
  • Xcode 将文件框中的 gpx 文件显示为灰色

    我希望我没有忽略任何事情 但我无法将 gpx 文件加载到 Xcode 中 因为它们在文件框中显示为灰色 见图 这在两个位置菜单中都有 在调试器 位置菜单中 参见下图 将 GPX 文件添加到项目 和 场景位置菜单 然而 预设 伦敦等 确实有效
  • 如何总结不同的groupby组合?

    我正在编制一份按县列出的前 3 名作物的表格 有些县的农作物品种相同 顺序相同 其他县也有相同的作物品种 但顺序不同 df1 pd DataFrame County Harney Baker Wheeler Hood River Wasco
  • 如何使用@types/express-session?

    当我写这个时 import Request from express serve static core router post req Request res next gt req session user user tsc给我一个错误