转自个人博客:shenlu.me/2021/10/26/…
使用 TypeScript 开发项目的过程中,经常需要使用 tsc
命令将 TS 代码编译成特定版本的 ECMAScript,在tsconfig.json
配置文件中有一个 target
字段,决定编译后输出的 ECMAScript 版本,默认输出 ES3
。target
字段有多个值可以选择,有一个名为 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
的范围了。