近日,微软宣布一项雄心勃勃的Annotations(类型注解)被添加到JavaScript官方标准ECMAScript中。根据微软官方的信息:“这个提案旨在让开发者能够在JavaScript代码中加入类型注解,允许JavaScript之外的类型检查器检查这些注解,而在运行时,JavaScript引擎会忽略它们并将类型视为注解。目标上述提议的目的是让开发人员无需任何编译即可运行用TypeScript、Flow和其他静态类型的JavaScript“超集”编写的程序(如果它们在子集内保持相当大的话)。上述提议在中得到了充分解释微软TypeScript高级项目经理DanielRosenwasser于3月9日撰写的博客文章。如果该提案得以推进,可能需要数年时间。该博客文章解释说,该提案与最近JavaScript迭代速度更快和构建步骤更少的趋势有关,这正在使JavaScript编码更快、更容易。与此同时,现代长青浏览器也推动了这一趋势,这些浏览器通常没有ger要求开发人员编译新版本的JavaScript以在旧的运行时上运行。如之前的提案所述,该提案中的语法就像注释一样,因此不会影响周围代码的运行方式。这在DanielRosenwasser上面的博客文章中也有解释:“这个提议背后的想法是,JavaScript可以为引擎完全忽略的类型创建一组语法,但TypeScript、Flow等工具可以使用,”“这个允许我们保留开发人员喜欢TypeScript的东西——它的类型检查和编辑体验,同时消除了开发中构建步骤的需要。”在这个新场景中,当涉及到编写和运行代码时,开发人员的内部循环如下图所示:因为JavaScript的类型语法以前就存在过,并且开发人员对任何此类功能的工作原理有很多不同的想法,所以许多细节还没有具体化。对此,DanielRosenwasser补充说,至少需要为以下方面添加语法:变量和函数的类型注释(可选)修饰符(?)参数和类成员类型声明(接口和类型别名)类型断言运算符(如和!)虽然可见性修饰符(如公共、私有和受保护)等其他结构也可能在范围内,但枚举、命名空间和参数属性等其他结构不在范围内,因为它们具有可观察的运行时行为。DanielRosenwasser说,“这些功能可以根据反馈作为单独的ECMAScript功能提出,但我们目前的目标是支持一些大型的TypeScript子集,我们认为它们可能是对JavaScript的有价值的补充。”据悉,这些提案将在即将于2022年3月举行的TC39(“规范JavaScript”)全体会议上提出。TC39是一个由JavaScript开发人员、实施人员、学者和其他与社区合作维护和发展定义的委员会JavaScript,希望从“Stage0”跳到“Stage1”。Rosenwasser强调,“达到第1阶段意味着标准委员会已经决定支持类型语法值得ECMAScript考虑”。“这并不能保证会引起轰动,委员会内部有很多有价值的观点,我们确实希望会有一些怀疑。像这样的提议会得到很多反馈和适当的审查,所以它可能会涉及很多设计变更,可能需要数年才能产生结果。”“但如果我们完成这一切,我们就有机会对JavaScript世界做出最具影响力的改进之一。我们对此感到兴奋,我们希望你也是。”
