最近, Type v5.0 beta[1] 发布,主打特性是 「支持Decorators」。
有同学会疑惑, Decorators 不是早就有的特性么?各种框架(比如 Nest.js 、 Angular )早就用的飞起, ts 不也早就支持了么?
之所以会有这样的疑惑,简单的说,现阶段大家使用的是老的 Decorators 规范,在 ts 中使用需要加上 --experimentalDecorators flag 。而 ts 本次更新支持的是2022年3月新的 Decorator 规范。
这背后更本质的原因,涉及到新的 JS 语法诞生的过程。今天,我们就以 Decorators 为例聊聊一个新的 JS 语法是如何诞生的。
新特性是如何产生的
要经历5个阶段
所有 ES 语法的诞生都由国际标准组织 Ecma International[2]下属的 TC39 (the 39nth Technical Committee)委员会负责。
这是个会员制的组织,由入会的公司、组织推举的代表组成。这些代表通常是 JS 开发者、学者或编程语言领域的专家(比如大家熟悉的 「贺老」)。国内的360、阿里、华为、SujiTech都曾参与 TC39 。
委员会定期召开会议推进新的 ES 语法落地,这套语法落地的流程被称为 The TC39 Process[3] 。
值得一提的是,这套流程起源于 ES2015[4] ,也就是大名鼎鼎的 ES6 。
ES2015 整个版本的落地用了整整6年,包含大量新特性。我想这也是为什么提到 ES 新特性,很多同学首先会想到 ES2015 (即 ES6 )的原因吧。
从 ES2017 开始,每年都会发布新的版本,包含那些通过 The TC39 Process 但在上个版本没有发布的特性。
The TC39 Process
整个流程包含5个阶段,阶段0~阶段4。接下来简要介绍下各阶段的目标。
阶段0:稻草人(Strawperson)
阶段0被称为 Strawperson (稻草人),由 TC39 成员发起,通常是提出新想法或是对未纳入正式的提案进行修改。
比如, Decorator提案[5] 由 **「Yehuda Katz」**于2014年4月10日提出。
等到这份提案到阶段3,已经2022年3月了,可想而知一个新特性的诞生有多不容易。
阶段1:提案(Proposal)
阶段1被称为 Proposal (提案),此时该提案已经成为正式提案。该阶段主要提出一些具体的问题和解决方案。此时会选出一名 TC39 成员(通常是该提案的发起者)负责推动该提案。