微软提议为 JavaScript 原生增加类型标注原创
微软日前提出了一项新的提案,在提案中希望可以为 JavaScript 带来可选的类型语法,该提案可能会使 JavaScript 原生自带 TypeScript 的一些特性,使 TypeScript 语言更快、更容易使用。
具体而言,该提案要求将类型标注(Type Annotations)添加到 JavaScript 代码中,允许类型标注被外部类型检查器检查。在运行时,JavaScript 引擎会忽略这些标注并将这些类型视为注释。该提案要求 JavaScript 为类型划出一套语法,JavaScript 引擎将忽略这些语法,但 TypeScript、Flow 等工具可以使用。这项建议将为 ECMAScript 增加可选的类型语法。
该提案的目的是让开发者能够运行用 TypeScript、Flow 或其他静态类型的 JavaScript 超集所编写的程序,而不需要转译。微软在公告中表示,新的语法将有效地起到注释作用,而不会改变代码的运行方式。
微软在提案中还表示,在过去十年中,静态类型检查的案例已经被证明相当成功。对 JavaScript 的大量投资(如微软 TypeScript、Google Closure Compiler 和 Facebook Flow)为在 JavaScript 中声明和使用类型提供了方便的语法,并获得了在其他静态类型语言中所看到的生产力的提高。它们的语法大多不会影响运行时的语义,实际上将这些变体转换为普通的 JavaScript 的大部分工作都是在删除类型。
此外在 2020 和 2021 年的 JS 调查中,静态类型也一直是 JavaScript 开发者强烈要求的一个功能。
类型语法在 JavaScript 中的兴起与下层编译(或称转译)的兴起相吻合。因为类型语法在 JavaScript 中没有得到原生支持,所以必须有一个工具能够在运行代码之前删除这些类型。对于像 TypeScript 和 Flow 这样的类型系统来说,将类型清除步骤与语法降级相结合是有意义的,这样用户就不需要运行单独的工具。
这个提案将减少对构建步骤的需求,使一些开发设置变得更加简单,用户将可以更加简单地运行他们编写的代码。
微软在提案中并没要求将 TypeScript 的类型检查放在每个浏览器和 JavaScript 运行时中,也没要求在浏览器中放置一个新的类型检查器。微软认为这将给 JavaScript 和 TypeScript 用户带来运行时的性能和兼容性问题,也有可能阻止创新。目前该提案还处于 Stage 0 阶段,更多提案内容可查看微软官方页面。