共计 1938 个字符,预计需要花费 5 分钟才能阅读完成。
大家好,我卡颂。
最近,Typescript v5.0 beta 公布,主打个性是 反对 Decorators。
有同学会纳闷,Decorators
不是早就有的个性么?各种框架(比方 Nest.js
、Angular
)早就用的飞起,ts
不也早就反对了么?
之所以会有这样的纳闷,简略的说,现阶段大家应用的是老的 Decorators
标准,在 ts
中应用须要加上 --experimentalDecorators flag
。而ts
本次更新反对的是 2022 年 3 月新的 Decorator
标准。
这背地更实质的起因,波及到新的 JS
语法诞生的过程。明天,咱们就以 Decorators
为例聊聊一个新的 JS
语法是如何诞生的。
欢送退出人类高质量前端交换群,带飞
新个性是如何产生的
所有 ES
语法的诞生都由国际标准组织 Ecma International 上司的TC39
(the 39nth Technical Committee)委员会负责。
这是个会员制的组织,由入会的公司、组织推举的代表组成。这些代表通常是 JS
开发者、学者或编程语言畛域的专家(比方大家相熟的 贺老)。国内的 360、阿里、华为、SujiTech 都曾参加TC39
。
委员会定期召开会议推动新的 ES
语法落地,这套语法落地的流程被称为 The TC39 Process。
值得一提的是,这套流程起源于 ES2015,也就是赫赫有名的ES6
。
ES2015
整个版本的落地用了整整 6 年,蕴含大量新个性。我想这也是为什么提到 ES
新个性,很多同学首先会想到ES2015
(即ES6
)的起因吧。
从 ES2017
开始,每年都会公布新的版本,蕴含那些通过 The TC39 Process
但在上个版本没有公布的个性。
The TC39 Process
整个流程蕴含 5 个阶段,阶段 0~阶段 4。接下来简要介绍下各阶段的指标。
阶段 0: 稻草人(Strawperson)
阶段 0 被称为 Strawperson
(稻草人),由TC39
成员发动,通常是提出新想法或是对未纳入正式的提案进行批改。
比方,Decorator 提案由 Yehuda Katz 于 2014 年 4 月 10 日提出。
等到这份提案到阶段 3,曾经 2022 年 3 月了,可想而知一个新个性的诞生有多不容易。
阶段 1: 提案(Proposal)
阶段 1 被称为 Proposal
(提案),此时该提案曾经成为正式提案。该阶段次要提出一些具体的问题和解决方案。此时会选出一名TC39
成员(通常是该提案的发起者)负责推动该提案。
持续以 Decorator 提案
举例,他在 2015 年 3 月 24 日达到阶段 1。
该阶段指明了 Decorator
的:
- 设计目标
- 适用范围
比方,实用于类自身:
@F("color")
@G
class Foo {}
实用于类办法:
class Foo {@F("color")
@G
bar() {}
}
除此之外,还能实用于类的拜访器属性(getter、setter)、对象字面量、对象的拜访器属性。
- 语法
在 Decorator
进入阶段 1 的一个月后,Babel
跟进了 Decorator
的polyfill
实现。这个版本的 polyfill
被称为legacy
。
咱们能够在 Babel
官网看到,对于 Decorator
个性存在 5 个可选项:
不同版本的可选项对应了 Decorator
提案不同阶段的落地工夫,因为不同阶段对 Decorator
标准提出了修改意见,所以相应的,Babel
插件也就有了不同可选项。
相似的起因,ts
中反对的 Decorator
也就有了不同版本,这也是造成咱们开篇提到问题的实质起因。
阶段 2: 草稿(Draft)
阶段 2 被称为 Draft
(草稿)。在该阶段会用ES
语法尽可能准确地形容提案的语法、语义和 API,并提供实验性的实现。
到了该阶段,意味着提案会有很大概率呈现在正式版本的 ES
中。
Decorator
达到阶段 2 的工夫是 2016 年 7 月 28 日,间隔阶段 1 曾经过来一年多工夫。
阶段 3: 候选人(Candidate)
阶段 3 被称为Candidate
(候选人)。到了该阶段,提案根本曾经定型,仅依据内部反馈针对关键问题进行更改。
ts
在最新的 v5.0 beta
版本中默认反对的 Decorator
就是阶段 3。
阶段 4: 实现(Finished)
阶段 4 被称为 Finished
(实现)。该提案会呈现在正式的标准文档中,并在下一个版本的ES
中正式反对。
总结
语言个性的推动是个蛮长的过程,最终达成的是多方博弈的后果。对于 ES
来说,这些博弈就体现在这 4 个阶段中。
还是以 Decorator
举例,这个个性在 oop
框架(比方 Angular
、Mobx
)中是很重要的个性。Angular
团队在实现 Angular2
时,最后思考用 AtScript
实现。
而最终 Angular
用ts
实现,其中很重要的一个起因是 —— ts
团队承诺实现一些 AtScript
个性,尤其是Decorator
。