node.js - NodeJS 上错误的更好的 TypeScript 定义
问题描述
如果您在 NodeJS 项目中安装了 typescript 作为依赖项,那么您将在node_modules/typescript/lib/lib.es5.d.ts
文件中找到 Error 的定义:
interface Error {
name: string;
message: string;
stack?: string;
}
该stack
道具是可选的,因为它是一个非标准的 Ecmascript 道具。
NodeJS 基于 V8,所以根据我的理解,由 V8 团队决定堆栈是否包含在new Error()
对象中。并且相信我会说,它现在是如此嵌入,以至于如果要删除它,很多代码会破坏,所以我们可以在很长一段时间内依赖它。
为了简化我的 NodeJS 代码,我可以这样做:
type NodeError = Required<Error>;
这意味着stack
如果我将我的错误转换为这种类型,我将不会收到我的使用可能未定义的 TypeScript 警告。
我觉得在生态系统中可能还有另一个地方可能定义了错误,但我还没有找到它是基于 V8 的,并且可能已经具有Error
像这样定义的类型。对我来说,最明显的地方@types/node
就是从 TypeScript 的角度来看,这是 Node API 的代表。据我所知,它建立在前面提到的 ES5 类型之上,并且只添加了 Node 特定的 API 或差异。
是否有一种“更标准”或“更健壮”的方式来告诉 TypeScriptstack
将会安全地持续到 NodeJS 和 V8 的未来版本中?即我宁愿让这种类型来自我所针对的运行时的发布者,而不是我做一个演员。
解决方案
推荐阅读
- if-statement - 使用 if 和 Else 在 R 中渲染文本时出现问题
- python - 如何使用 Python 从 USB 读取数据?(pyUSB)
- javascript - v模型值变化时触发哪个事件
- google-sheets - 条件格式 - 一个范围内的单元格具有来自另一个范围的匹配值
- sorting - 如何检查自定义结构的切片是否已排序?
- python - 计算数据帧两列之间的小时或秒时间差
- php - 如何在每列中搜索 PHP
- php - symfony 4 form translate twig中的变量包括
- javascript - django - 使用不同的参数多次调用视图
- sql - 对于此服务器版本,选择在此位置无效,应为:'(', WITH