首页 > 解决方案 > 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 的未来版本中?即我宁愿让这种类型来自我所针对的运行时的发布者,而不是我做一个演员。

标签: node.jstypescript

解决方案


推荐阅读