新语法特性的诞生
所有ES语法的诞生都由国际标准组织Ecma International下属的TC39(the 39nth Technical Committee)委员会负责。委员会定期召开会议推进新的ES语法落地,这套语法落地的流程被称为The TC39 Process。这套流程起源于ES2015,也就是ES6。
TC39 流程
Stage0(Strawperson 稻草人)
-
由TC39成员发起,通常是提出新想法或是对未纳入正式的提案进行修改。
-
装饰器提案由「Yehuda Katz」于2014年4月10日提出,进入Stage 0阶段。
Stage1(Proposal 提案)
-
此时该提案已经成为正式提案。该阶段主要提出一些具体的问题和解决方案。此时会选出一名TC39成员(通常是该提案的发起者)负责推动该提案。
-
装饰器提案在2015年3月24日到达Stage1。该阶段指明了装饰器的设计目的、适用范围以及语法。例如,适用于类本身、类方法、类的访问器属性(getter、setter)、对象字面量、对象的访问器属性。
-
在装饰器进入阶段1的一个月后,Babel跟进了Decorator的polyfill实现。这个版本的polyfill被称为legacy。我们可以在Babel官网看到,对于Decorator特性存在5个可选项:不同版本的可选项对应了Decorator提案不同阶段的落地时间,由于不同阶段对Decorator规范提出了修改意见,所以相应的,Babel插件也就有了不同可选项。
-
类似的原因,ts中支持的Decorator也就有了不同版本。
Stage2(Draft 草稿)
-
在该阶段会用ES语法尽可能精确地描述提案的语法、语义和API,并提供实验性的实现。到了该阶段,意味着提案会有很大概率出现在正式版本的ES中。
-
装饰器到达Stage 2的时间是2016年7月28日,距离阶段1已经过去一年多时间。
Stage3(Candidate 候选人)
-
到了该阶段,提案基本已经定型,仅根据外部反馈针对关键问题进行更改。
-
2022年3月28日,「Chris Garrett」 加入提案后帮助装饰器进入了 Stage 3阶段,并将装饰器 metadata 的能力单独抽离到另一个阶段二的提案。
-
2023年1月26日,ts在最新的v5.0 beta版本中默认支持装饰器的Stage 3。
Stage4(Finished 完成)
-
该提案会出现在正式的规范文档中,并在下一个版本的ES中正式支持。
相关链接
- Decorator提案: github.com/tc39/notes/…
- Typescript v5.0 beta: devblogs.microsoft.com/typescript/…
- Stage3 装饰器: github.com/tc39/propos…
- Stage1 到 Stage3的重点变化: mp.weixin.qq.com/s?__biz=Mzk…