【问题标题】:TypeScript tsconfig settings for Node.js 12?Node.js 12 的 TypeScript tsconfig 设置?
【发布时间】:2020-05-04 08:30:35
【问题描述】:

输出将在 Node.js 12 上运行的代码的最佳 TypeScript tsconfig 设置是什么?

【问题讨论】:

    标签: node.js typescript


    【解决方案1】:

    从 Node.js 12.0.0 开始,支持 100% 的 ES2019。如果您知道您的目标是该版本或更高版本,则最佳配置如下所示:

    • "module": "commonjs"

      Node.js 正在添加 ES-Modules,但现在我们必须坚持使用 CommonJS。

    • "target": "es2019"

      这告诉 TypeScript 可以输出带有 ES2019 特性的 JavaScript 语法。在实践中,这意味着它将例如输出对象 rest/spread 属性和 async/await 语法,而不是嵌入 polyfill。

    • "lib": ["es2019", "es2020.bigint", "es2020.string", "es2020.symbol.wellknown"]

      这告诉 TypeScript 可以使用 ES2019 或更早版本中引入的函数和属性。在实践中,这意味着您可以使用例如String.prototype.trimStartArray.prototype.flat

      除了 ES2019,Node.js 12 还支持 ES2020 中的 BigIntmatchAll,因此我们包含了 ES2020 中的附加定义。

    完整的配置将是:

    {
      "compilerOptions": {
        "lib": ["es2019", "es2020.bigint", "es2020.string", "es2020.symbol.wellknown"],
        "module": "commonjs",
        "target": "es2019"
      }
    }
    

    如果您的目标是 Node.js 12.9.0 或更新版本,您可以简单地指定 "lib": ["es2020"],因为该版本支持 ES2020 中引入的所有新函数和属性。不过它不支持新的 JavaScript 语法,所以你仍然需要继续使用"target": "es2019"

    完整的配置将是:

    {
      "compilerOptions": {
        "lib": ["es2020"],
        "module": "commonjs",
        "target": "es2019"
      }
    }
    

    如果你运行的是 Node.js 16,你可以看到我的 similar answer for Node.js 16 here

    如果你运行的是 Node.js 14,你可以看到我的similar answer for Node.js 14 here

    如果你运行的是 Node.js 10,你可以看到我的 similar answer for Node.js 10 here

    如果你运行的是 Node.js 8,你可以看到我的similar answer for Node.js 8 here

    【讨论】:

    • 现在还有es2020.promise,从Node 12.10.0开始支持。
    • @IvanYarych 我的答案的底部有一个 Node.js >= 12.9.0 部分,其中包括es2020,而es2020 又包括 es2020.promise
    • @LinusUnnebäck 谢谢你的这些,它们令人耳目一新。我喜欢你继续为 Node 14 做了一个。至于对此的“引用”,TypeScript 项目是否为给定版本的 Node 发布了这些特定的目标和 lib 值?
    • @IAmKale 比你说的好话! TypeScript 没有发布这些信息,相反,我的答案主要基于 node.green、一些我自己的测试和 TypeScript 文档
    • @PiersMacDonald 嗯,这很不幸。似乎没有办法告诉 TypeScript 不支持无效合并,而 BigInt 文字支持。如果您将目标设置为 ES2020,TypeScript 将发出 Node 不支持的 ??...如果可能的话,我建议您升级到支持完整 ES2020 目标的 Node.js 14。
    【解决方案2】:

    TL:DR

    TypeScript 维护了与节点版本对应的目标、模块和库的映射。你可以在这里找到它 https://github.com/microsoft/TypeScript/wiki/Node-Target-Mapping

    【讨论】:

      【解决方案3】:

      使用tsconfig bases 会容易得多。

      运行 npm install --save-dev @tsconfig/node12 然后在 tsconfig.json 中

      {
        "extends": "@tsconfig/node12/tsconfig.json",
        // ...your configrations
      }
      

      有一些针对不同环境的 tsconfig 库,社区不断添加更多。

      【讨论】:

        猜你喜欢
        • 2019-01-13
        • 2020-08-04
        • 1970-01-01
        • 2016-06-08
        • 1970-01-01
        • 1970-01-01
        • 2019-12-06
        • 2015-03-04
        相关资源
        最近更新 更多