【问题标题】:TypeScript: What's the "right" `target` for node 11?TypeScript:节点 11 的“正确”“目标”是什么?
【发布时间】:2019-08-01 14:21:33
【问题描述】:

TypeScript 的 target 配置有很多值,例如 esnextes2015es6 等(非常混乱)

NodeJs 当前版本 (11.11.0) 支持 JavaScript 的许多新功能。可以在 TypeScript 上定位 esnext 吗?会有用吗?

如果不是,那么在定位 nodeJs 11.11.0 时使用正确的 target 是什么

编辑:

感谢@Seblor,我们知道esnext 非常动态,TC39 可以添加他们认为合适的功能。它代表正在开发的 JavaScript 的下一个版本(关于就特性达成一致)

提炼的问题应该是:根据NodeJs的当前版本(11.11.0)和TypeScript的当前版本(3.3)我们可以使用esnext作为target吗?

【问题讨论】:

  • es2015 和 es6 是一样的。 esnext 是撰写本文时的下一个版本。更多细节在这里:en.wikipedia.org/wiki/ECMAScript
  • 看起来esnext 非常动态并且可以随时更改,但TypeScriptesnext 的支持是静态的(每个版本)
  • esnext 将在 ECMAScript 的新版本发布后“更改”。

标签: node.js typescript


【解决方案1】:

基于 TypeScript wiki 上的 Node-Target Mapping "es2018" 是 Node 10 的正确映射,"es2019" 是 Node 12 的正确映射。似乎没有记录非 LTS 版本的 Node,但给出了这个信息我觉得"es2018"是最安全的目标。

【讨论】:

  • 很高兴在 TypeScript wiki 上有这些信息。谢谢!
【解决方案2】:

好的,所以答案是(像往常一样)取决于! 这取决于您计划使用的功能。 TypeScript 版本,target tsconfig.json 和 NodeJS 版本。

在使用 JavaScript 功能之前需要检查两件事:

  1. 您必须查看this table,并查看您的目标环境列,在我的例子中是NodeJs column。并确保单元格为绿色。红色表示您无法在此环境中运行此功能。

  2. 确保您可以使用 TypeScript 编译您的代码。如果您可以使用 TypeScript 编译代码,那就没问题了。请注意,您不能指望TypeScript column。红格表示编译后的代码不会在以前版本的 JavaScript 上运行...

例如BigInt:

带有target: "esnext" 的TypeScript 将编译(没有问题)带有bigint 的代码(虽然支持单元格为红色),您可以在NodeJS 11 上运行带有bigint 的JavaScript 代码

请注意,在左上角,有 ECMAScript 版本组。你可以低于esnext

【讨论】:

    【解决方案3】:

    node.green,Node 11.11.0 似乎支持 ES2018,所以你应该可以毫无问题地将 ES2018 设置为目标。

    您可以使用ES2019 甚至ESNext 来推动您的运气,因为支持看起来已经足够好了。但是,如果您使用 ESNext 作为目标(如私有属性),我不知道 typescript 是否会使用尚未实现的功能。

    我个人会坚持使用 ES2018,因为我认为没有必要推动 ESNext。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    相关资源
    最近更新 更多