网站搜索

typescript - 在 Node.js 项目中,TS 类型定义是否仍然需要 @types/core-js?


我有几个仅后端的 Node.js 项目,它们使用了一个简单的 TypeScript 配置。

在2018年3月之前,我在package.json中有这个:

  "devDependencies": {
    "@types/core-js": "^0.9.46",
    "@types/node": "^9.6.2"
  }

自2018年3月起,我一直省略 "@types/core-js",一切似乎都能正常编译。我们还需要 "@types/core-js" 吗?

答案#1

我有几个用 TypeScript 编写的基于 Node 的项目。我从来没有在我的项目中使用过 @types/core-js。所以在编写基于 Node 的代码时,使用 @types/core-js 绝对不是 必要的。另一方面,如果你打算使用 Node 的 API,拥有 @types/node 会非常有帮助。

如果遇到看起来是由于编译器不了解 ES6 中引入的特性而导致的编译问题,首先要做的事情是将 lib 设置为加载你需要的正确类型定义。例如,如果你决定以 es5 为目标,但想使用 ES6 中引入的方法、类、函数,你确实需要在 lib 设置中指定 "es6",因为默认情况下,目标 es5 也会加载 lib es5。根据文档,目标为 es5 时,lib 默认设置为 DOM,ES5,ScriptHost,而目标为 es6 时,lib 默认设置为 DOM,ES6,DOM.Iterable,ScriptHost。

我遇到过一些非常罕见的情况,其中es6库中缺少某些东西。在这种情况下,我只是编写一个定义来解决那个特定的问题。加载@types/core-js可能也能解决问题,但它还包含许多其他不必要的东西,并且会给项目增加一个依赖,从而必须进行管理等。不值得这样做。

上面关注的是 Node 项目,但即使是在我依赖 core-js 的基于 Web 的项目中,我也不使用 @types/core-js。在我看来,项目中存在 core-js 应该对项目的应用代码完全透明。我编写的代码旨在运行在任何提供符合 ES6 或更高版本 API 的平台上,而不是专门为 配合 core-js 使用 而编写的代码。

答案#2

你应该只在使用某些在该声明中存在但在你所用主要版本的 TypeScript 声明中不可用的功能时才需要 @types/core-js。如果你打算使用 core-js 中的核心 JavaScript ES6 功能,而这些功能在你当时使用的 TS 版本中尚未实现,这会很有用。在 TS 的 GitHub 上有更多与你的问题相关的信息,但实际上,如果你只是使用现在已存在的 ES 功能,那么你不再需要它了。

编辑:之前我把它说成是 node,但在所有可能性中,由于它是 TS,它可能不知道如何在没有声明的情况下编译到目标。自 TS 2 和 NodeJS 6 起,你其实不再需要它了。

相关文章