什么是ESNext?

使用 TypeScript 开发项目的过程中,经常需要使用 tsc 命令将 TS 代码编译成特定版本的 ECMAScript,在tsconfig.json配置文件中有一个 target 字段,决定编译后输出的 ECMAScript 版本,默认输出 ES3target字段有多个值可以选择,有一个名为 ESNext 的值。网上搜了一些对这个词的具体含义,我认为比较可靠的说法是这样的。

简单的说,ESNext 是一个动态的概念,指的是 ECMAScript 的下一个版本。

什么是 ECMAScript 的下一个版本?理解这个问题就必须知道 TC39 委员会的工作流程,具体可以查看这个连接 The TC39 Process。简单的说,一个新语法从提交到成为 ECMAScript 正式标准,需要经历五个阶段。

  • Stage 0 - Strawman(展示阶段)
  • Stage 1 - Proposal(征求意见阶段)
  • Stage 2 - Draft(草案阶段)
  • Stage 3 - Candidate(候选人阶段)
  • Stage 4 - Finished(定案阶段)

如果到了最后一个定案阶段 (Stage 4),那么就一定会包含在下一个发布的 ECMAScript 标准。举个例子,今年是2021年,我们现在用的 ECMASCript 版本是 ES2021,下一个版本是 ES2022,这个版本会在明年的6月份正式发布(每年都是这个时候),在 ES2022 发布之前,已经到定案阶段 (Stage 4) 的提案,就是目前的 ESNext

总结

ESNext 是一个动态的 ECMAScript 版本,指当前最新发布的版本没有包含,但已经定案(确定明年发布),包含新特性的 ECMAScript 版本。

TypeScript 可能也会支持 Stage 3 的提案,要看 TypeScript 团队怎么认定 ESNext 的范围了。

相关材料