如何指定 Express 响应返回的类型

2024-06-19

我正在尝试使用 TypeScript 标准化我的express.js Web应用程序中的响应,但我不太确定如何全局设置响应应该是这个接口:

{
  success: boolean,
  data?: any,
  error?: string,
}

现在我只是在写:

async (req: Request, res: Response, next: NextFunction) => {
  try {
    registerResponse = await register(req.body.email, req.body.password);
  } catch (error) {
    return res.json({
      success: false,
      error: error.message,
    });
  }

  return res.json({
    success: true,
    data: {
      message: 'Account registered',
    },
  });
};

有没有办法设置其他设置或重写 typedef 来实现硬编码的 res.json 类型?


您无法删除在类型上定义的函数,我们可以为该类型添加一个重载json带有模块增强的函数,但这没什么用处,因为如果我们弄错了属性,编译器将选择允许任何属性的函数的原始版本。

更激进的方法是创建一种与Response但这会删除原来的json方法并将其替换为类型化版本。我们可以使用映射类型,这样我们就不会重复任何原始类型:

// Helpers
type Diff<T extends string, U extends string> = ({ [P in T]: P } & { [P in U]: never } & { [x: string]: never })[T];
type Omit<T, K extends keyof T> = Pick<T, Diff<keyof T, K>>;

// Generic typed response, we omit 'json' and we add a new json method with the desired parameter type
type TypedResponse<T> = Omit<Response, 'json'> & { json(data: T): Response };
// An example of a typed response
type AppResponse = TypedResponse<{
    success: boolean,
    data?: any,
    error?: string,
}>

app.get('/', async (req: Request, res: AppResponse, next: NextFunction) => {
    try {
        // ....
    } catch (error) {

        return res.json({
            success: false,
            error: error.message,
            errors: "" // causses error
        });
    }

    return res.json({
        success: true,
        data: {
            message: 'Account registered',
        },
    });

}

不幸的是,没有办法强制开发人员使用通用版本(除了长棍),但通过代码审查,这可能对您来说足够有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何指定 Express 响应返回的类型 的相关文章

  • Node.js Express 网站实时更新数据

    我正在尝试实现一些我认为应该非常简单的事情 但我发现的所有教程和示例似乎都有点矫枉过正 我在做什么 我定期获取天气信息 并且我想在每次获取时更新网站上的文本 而无需用户刷新浏览器 几乎每个关于实时数据更新的教程都建议使用socket io
  • 将打字稿字符串转换为布尔值

    我正在尝试将字符串转换为布尔值 有几种方法可以做到这一点 一种方法是 let input true let boolVar input true 这里的问题是我必须验证输入是否正确 除了验证第一个输入然后进行转换之外 还有其他更优雅的方法吗
  • 如何将express.js服务器部署到Netlify

    我正在尝试将 Vue js Node Express MongoDB MEVN 堆栈应用程序部署到 Netlify 我成功地将应用程序的前端部署到 Netlify 现在正在尝试基于以下内容部署 Express 服务器serverless h
  • Angular 10 在从不同工作区渲染组件时使用库时无法读取 null 属性“bindingStartIndex”

    我创建了一个位于我的应用程序工作区之外的 Angular Library 结果是我有两个不同的工作空间 我的第一个方法是建立我的图书馆和链接 dist与我的应用程序的文件夹 这对于 ngserve 来说效果不太好 但无论如何我在渲染我的库组
  • typescript 派生类不能有相同的变量名?

    为什么 TypeScript 派生类不能具有相同的变量名 即使这些成员也是私人的 有没有替代方案 或者我做错了什么 class ClassTS private nom string ClaseTS constructor class Cla
  • 两个项目之间的跨项目引用

    是否可以在两个 TypeScript 项目之间进行引用 假设我们有以下项目结构 Module1 ts包含 module TestModule export interface Interface1 Module2 ts包含 module T
  • 快速查看缓存表现得很有趣

    我在express Jade 中的视图缓存中遇到了一些有趣的事情 控制器通过 Mongoose 从 MongoDB 获取文章并将其交给 res render 函数 然而 运行几分钟后 Express 开始为该路由的所有请求提供相同的编译模板
  • 尝试使用作为 ObjectType key 的变量设置对象属性时,类型“any”不可分配给类型“never”

    在下面的代码中 typscript 编译器在更新方法中显示错误 指出 any 不能分配给类型 never 我注意到当类型包含与其他类型混合的布尔值时 keyof 类型不起作用 如何使其编译时在类型中具有混合类型值 type ConfigSt
  • 多重继承解决方法

    我试图发现一种将多个接口组合成一个抽象类的模式 目前我可以通过组合多个接口implements 但接口不能声明构造函数 当我必须引入构造函数时 我被迫使用抽象类 当我使用抽象类时 我必须重新声明整个复合接口 我肯定错过了什么吗 interf
  • 从元组/数组值派生联合类型

    假设我有一个数组 const list a b c 是否可以从这个值联合类型派生出 a b c 我想要这个是因为我想定义只允许来自静态数组的值的类型 并且还需要在运行时枚举这些值 所以我使用 array 如何使用索引对象实现它的示例 con
  • 使用node+express解压POST正文

    我有一个简单的节点应用程序 应该从客户端写入指标 客户端以 json 格式发送指标 并用 python 的 zlib 模块压缩 我试图添加一个中间件来在快速 bodyParse 发生之前解压缩请求帖子 我的中间件就是express默认提供的
  • 如何在 TypeScript 中将字符串转换为枚举?

    我在 TypeScript 中定义了以下枚举 enum Color Red Green 现在 在我的函数中 我收到字符串形式的颜色 我尝试过以下代码 var green Green var color Color
  • 如何在nodejs中处理xhr blob post

    客户端代码 var xhr new XMLHttpRequest xhr open POST frame true xhr send blob 服务器代码 app use bodyParser urlencoded extended fal
  • 将对象数组发布到帆会导致“类型错误:无法将对象转换为原始值”

    在我的 html 页面中 我将这篇文章发送到我的 sails 服务器 但我无法获取控制器中的数据 因为 req param 函数不会返回任何有意义的答案 这是网页代码 post http myserver local calendar ba
  • 如何模拟 FileReader 的失败

    我有一个函数可以创建一个FileReader 在该函数中我还设置了load and error事件处理程序 handleFileSelect files ArrayLike
  • Express COR 策略阻止 Apollo 客户端从服务器获取数据

    我正在运行一个反应开发服务器http localhost 3000和一个快递服务器http localhost 8080并使用 Apollo 客户端来查询服务器 为了使会话数据能够从客户端传递到服务器 我添加了credentials inc
  • 使用与打字稿反应来玩笑测试复制到剪贴板方法

    我试图确保当用户单击按钮时将正确的值复制到用户剪贴板 这是我的复制方法 我在输入上使用 ref 来访问正确的值 protected copyToClipboard console log clicked const text this co
  • 如何将 JSON 对象解析为 TypeScript 对象

    我目前正在尝试将收到的 JSON 对象转换为具有相同属性的 TypeScript 类 但无法使其工作 我究竟做错了什么 员工阶层 export class Employee firstname string lastname string
  • express.js less 编译器:无法工作

    app js app use express compiler src dirname public enable less app use express static dirname public 在我的玉观中 link rel sty
  • 与 Typescript 结合使用Reducers 返回错误“类型参数不可分配给‘ReducersMapObject’类型参数”

    我正在尝试使用react redux typescript 设置一个前端环境 但我很难让它与combineReducers 一起工作 我收到错误 类型参数不可分配给 ReducersMapObject 类型的参数 请参阅代码下方的完整错误消

随机推荐

  • 如何获取与我当前所在商店相关的产品所属类别 ID

    我在产品页面上并拥有产品对象 但是当我尝试使用以下方式获取类别 id 时 product gt getCategoryIds or product gt getResource gt getAttribute category ids gt
  • 为什么 Rails 应用程序在底部显示数据库信息?

    我创建了一个博客 每当我添加帖子时 帖子索引页面底部总会显示数据库中的记录列表 home html erb 像这样
  • C# 创建包含多个文件的 ZIP 存档

    我正在尝试创建包含多个文本文件的 ZIP 存档 如下所示 Dictionary
  • 在 Javascript 中本地化字符串

    我目前正在使用 resx文件来管理我的 NET 服务器端资源 我正在处理的应用程序还允许开发人员将 JavaScript 插入各种事件处理程序中以进行客户端验证等 对我来说本地化 JavaScript 消息和字符串的最佳方法是什么 理想情况
  • 拖放区缩略图宽度图像大小

    如何更改上传图像的缩略图大小 我在我的javascript中尝试过thumbnailWidth 350 但是这不会增加缩略图大小 而缩略图只是看起来放大了 如何操作图像缩略图大小 HTML section section
  • 在 AIX 中使用 Mailx 通过电子邮件发送 SQLPlus 查询结果的 Shell 脚本

    我有我需要的命令 如果我在提示符下执行这些命令 一切都会按预期进行 SQLPlus 运行查询 将结果导出到文件 然后 Mailx 将该文件通过电子邮件发送给我 sqlplus username pwd instance SPOOL home
  • Python 不考虑 distutils.cfg

    我已经尝试了给出的所有内容 并且所有教程都指向相同的方向 即使用 mingw 作为 python 而不是 Visual C 中的编译器 我确实有 Visual C 和 mingw 当我想使用 pip 安装时 问题开始出现 它总是给Unabl
  • Googletest 参数化测试崩溃

    我刚刚了解到googletest 中的值参数化单元测试 https github com google googletest blob master docs advanced md value parameterized tests并想在
  • 和弦科学

    我一直在研究试图理解声音和正弦波的工作方式 特别是和弦 到目前为止 我的理解如下 b t sin Api t 是频率 A 处和弦的基音 T t sin 5 4piA t 是基数 b t 的大三分之一 D t sin 3 2piA t 是底
  • 无法在.net core中使用WCF WSHttpBinding

    我正在尝试将我的项目从 net 移动到 net core 我最初在 net 中使用 WCF WSHttpBinding 服务 但无法在 net core 中使用相同的服务 我尝试使用 BasicHttpBinding 在客户端与 WsHtt
  • Smartgit:自动插入提交消息

    有没有办法使用钩子脚本在 Smartgit 中自动插入提交消息 重击 如果用户提交了他的更改 我想预加载提交消息字段 我没有看到任何SmartGit配置 http www syntevo com smartgit documentation
  • Python:json_normalize pandas 系列给出 TypeError

    我在 pandas 系列中有数万行像这样的 json 片段df json IDs lotId 1 Id 123456 date 2009 04 17 bidsCount 2 IDs lotId 2 Id 123456 date 2009 0
  • 使用 Boto3 超时的 AWS Lambda 函数

    我已经解决了我自己的问题 但无论如何我都会发布它 希望能节省其他人几个小时 我在 AWS 上有一个无服务器项目 使用 Python 将记录插入到 kinesis 队列中 但是 当我使用 boto3 client kinesis 或 put
  • 如何在 Linux 中使用 C 语言使用共享内存

    我的一个项目有点问题 我一直在试图找到一个有据可查的使用共享内存的例子fork 但没有成功 基本上情况是 当用户启动程序时 我需要在共享内存中存储两个值 当前路径这是一个char and a 文件名这也是char 根据命令参数 启动一个新进
  • Java Spring 应用程序存在内存泄漏。系统非堆内存不断增加

    我已使用 yourkit 分析器监视我的 Web 应用程序 保留最大大小的主要对象是 SessionFactoryImpl webappclassloader 和 CGlib 对象显示 spring crone调度程序会导致内存泄漏吗 我尝
  • Kotlin - 即使有 init() 函数,属性也必须初始化或者是抽象的

    我已使用 Android Studio 3 0 将此代码从 Java 转换为 Kotlin internal var background Drawable internal var xMark Drawable private fun i
  • C# 枚举 - 根据掩码检查标志

    我有以下枚举标志 Flags private enum MemoryProtection uint None 0x000 NoAccess 0x001 ReadOnly 0x002 ReadWrite 0x004 WriteCopy 0x0
  • 使用 Python 和 lmfit 拟合复杂模型?

    我想适合椭偏仪 http en wikipedia org wiki Ellipsometry使用 LMFit 将数据转换为复杂模型 两个测量参数 psi and delta 是复杂函数中的变量rho 我可以尝试将问题分离为实部和虚部共享参
  • 要打乱的键值(整数、字符串)列表的最佳结构

    我需要在 Java 中实现一个结构 它是一个键值列表 类型为整数 字符串 并且我想对其进行洗牌 基本上 我想做类似的事情 public LinkedHashMap
  • 如何指定 Express 响应返回的类型

    我正在尝试使用 TypeScript 标准化我的express js Web应用程序中的响应 但我不太确定如何全局设置响应应该是这个接口 success boolean data any error string 现在我只是在写 async