TypeScript:针对Node 11,什么是“正确”的`target`?

19

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是撰写时的下一个版本。更多细节请参见:https://en.wikipedia.org/wiki/ECMAScript - Seblor
看起来 esnext 非常动态,可以随时更改,但是 TypeScriptesnext 的支持是静态的(按版本)。 - gilamran
esnext将在ECMAScript的新版本发布后进行“更改”。 - Seblor
3个回答

10

根据 TypeScript wiki 上的 Node-Target Mapping,使用 "es2018" 是 Node 10 的正确映射,使用 "es2019" 是 Node 12 的正确映射。似乎非 LTS 版本的 Node 没有详细说明,但根据这些信息,我认为 "es2018" 是最安全的目标。


1
很高兴在TypeScript维基上获得这些信息。谢谢! - vhs

5

看起来 node.green,Node 11.11.0已经完全支持ES2018,因此你应该可以轻松地将ES2018设置为目标。

你可以尝试使用ES2019或甚至ESNext,因为支持情况似乎足够好。 但是,我不知道如果您将ESNext作为目标,typescript是否会使用尚未实现的功能(例如私有属性)。

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


@RTW 我实际上正在看第三阶段,那时(https://web.archive.org/web/20190318210754/https://node.green/)大部分都被覆盖了。使用第二阶段(或更低)没有真正的意义,因为它们可能会受到更改的影响。 - Seblor

3
好的,答案像往常一样是取决于!这取决于您计划使用的功能。TypeScript版本、tsconfig.json上的target和NodeJS版本。
在您可以使用JavaScript功能之前,有两件事情需要检查:
  1. 您必须查看此表格,并查看目标环境列,以我的情况为例是NodeJs列。确保单元格为绿色。红色表示您无法在此环境中运行此功能。

  2. 确保可以使用TypeScript编译代码。如果可以使用TypeScript编译代码,则没有问题。请注意,您不能依赖TypeScript列。红色单元格表示编译后的代码无法在早期版本的JavaScript上运行...

例如BigInt:
使用 target: "esnext" 的 TypeScript 可以编译(没有问题)带有 bigint 的代码(尽管支持单元格为红色),并且您可以在 NodeJS 11 上运行带有 bigint 的 JavaScript 代码。
请注意,在左上角有 ECMAScript 版本组。您可以选择低于 esnext 的版本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接