微软提议对 JavaScript 进行重大修改:将添加类型标注(Type Annotations)

简介: 微软提议对 JavaScript 进行重大修改:将添加类型标注(Type Annotations)

近日,微软宣布了一个雄心勃勃的项目 —— 正在支持并合作一项初始“阶段 0 ”的提案:将可选的 Type Annotations(类型标注)添加到官方 JavaScript 标准 ECMAScript 里面。

image.png

据微软官方信息显示:“该提议旨在使开发人员能够向 JavaScript 代码中添加类型标注,允许 JavaScript 外部的类型检查器检查这些注释,且在运行时,JavaScript 引擎会忽略它们,将类型视为标注。”

以上提议的目的是让开发者能够在不进行任何编译的情况下就能运行用 TypeScript、Flow 及其他静态类型的 JavaScript “超集”编写的程序(如果它们停留在语言的某个相当大的子集内的话)。

3 月 9 日,在 TypeScript 高级项目经理、微软 Daniel Rosenwasser 撰写的一篇博客文章中,对以上提案进行了全面解释。如果该提案继续往前推进的话,可能需要数年时间。

博文中解释称,此次提案与最近的趋势有关,即更快的 JavaScript 迭代、更少的构建步骤,这些趋势都正在使 JavaScript 编码变得更快、更简单。同时,这一趋势也得到了现代 evergreen 浏览器的推动,这些浏览器通常不再要求开发人员编译新版本的 JavaScript,以便在较旧的运行时上运行。

正如前面的建议所指出的,本次提案中语法的作用类似于注释,因此不会影响周围代码的运行方式。这一点在上面 Daniel Rosenwasser 的博文中也有所解释:

“这个提议的想法是,JavaScript 可以为引擎完全忽略的类型创建一组语法,但 TypeScript、Flow 等工具可以使用这些语法”,“这使我们能够保留开发者喜欢的 TypeScript 的东西——它的类型检查和编辑体验,同时消除开发中构建步骤的需要。”

在此次新方案中,当涉及到编写和运行代码时,开发人员的内部循环如下图所示:

image.png

由于 JavaScript 的 type syntax 之前就已经出现过,且开发人员对任何此类功能的工作方式都有许多不同的看法,因此许多细节还没有具体化。

对此,Daniel Rosenwasser 补充称,至少需要为以下内容添加语法:

  • 变量和函数的类型注释
  • (可选)modifiers(?)参数和类成员
  • 类型声明(接口和类型别名)
  • 类型断言运算符(as和!)

尽管可见性 modifiers 等其他构造(如 public、private 和 protected)也可能在范围内,但 enums、 namespaces 及 parameter properties 等其他构造并不在范围内,因为它们具有可观察的运行时行为。

Daniel Rosenwasser 表示,“这些功能可以根据反馈作为单独的 ECMAScript 功能提出,但我们目前的目标是支持 TypeScript 的一些大子集,我们认为这些子集可能是 JavaScript 的一个有价值的补充。”

据悉,该提案将在即将于 2022 年 3 月召开的 TC39(“指定 JavaScript”)全体会议上提出。

image.png

TC39 是由 JavaScript 开发人员、实现人员、学者及相关人士共同组成的委员会,他们与社区合作维护和发展 JavaScript 的定义,希望从“第 0 阶段”跳到“第 1 阶段”。

Rosenwasser 强调称:“达到第 1 阶段意味着标准委员会认为支持 type syntax 对于 ECMAScript 是值得考虑的”。“这并非一件肯定会引起轰动的事情,委员会内部有许多有价值的观点,我们确实希望会有一些怀疑。像这样的提案会得到很多反馈和适当的审查,所以它可能会涉及很多设计变更,可能需要数年才能产生结果。”

“但如果我们完成这一切,我们就有机会对 JavaScript 世界做出最有影响力的改进之一。我们对此感到兴奋,希望你们也感到兴奋。”

javascript

相关文章
|
13天前
|
JavaScript 前端开发 开发者
如何在 JavaScript 中处理不同类型的错误?
【10月更文挑战第29天】通过对不同类型错误的准确识别和恰当处理,可以提高JavaScript程序的可靠性和稳定性,减少错误对程序运行的影响。
|
1月前
|
JavaScript 前端开发 安全
深入理解TypeScript:增强JavaScript的类型安全性
【10月更文挑战第8天】深入理解TypeScript:增强JavaScript的类型安全性
45 0
|
3月前
|
前端开发 JavaScript 搜索推荐
Next.js 适合什么类型的项目开发?
【8月更文挑战第4天】Next.js 适合什么类型的项目开发?
206 3
|
12天前
|
JavaScript 前端开发 Java
除了 JavaScript,还有哪些编程语言支持 Set 类型
【10月更文挑战第30天】这些编程语言中的 `Set` 类型虽然在语法和具体实现细节上有所不同,但都提供了类似的集合操作功能,方便开发者在不同的编程场景中处理集合相关的数据和逻辑。
|
13天前
|
存储 JavaScript 前端开发
js的基础类型和引用类型
【10月更文挑战第29天】理解 JavaScript 中的基础类型和引用类型的区别对于正确地编写代码和理解程序的行为非常重要。在实际开发中,需要根据具体的需求合理地选择和使用不同的数据类型,以避免出现一些意想不到的错误和问题。同时,在处理引用类型数据时,要特别注意对象的引用关系,避免因共享引用而导致的数据不一致等问题。
|
5月前
|
JavaScript 前端开发
JavaScript中的布尔类型与数字类型详解
JavaScript中的布尔类型与数字类型详解
|
6月前
|
JavaScript 前端开发 安全
使用TypeScript增强JavaScript应用的类型安全性
【5月更文挑战第23天】TypeScript是微软开发的JavaScript超集,引入静态类型检查和面向对象特性,提升代码可维护性和可靠性。它在编译阶段捕获类型错误,增强代码可读性,并通过接口、类、泛型和类型断言等工具确保类型安全。使用TypeScript能有效避免复杂项目中的调试难题,尤其适合大型项目。
|
1月前
|
JavaScript 前端开发
JavaScript返回判断类型有哪些?
JavaScript返回判断类型有哪些?
31 0
|
3月前
|
缓存 JavaScript 前端开发
|
3月前
|
JavaScript 前端开发
在JavaScript如何确认数据的类型?
# `typeof` 与 `instanceof` 数据类型判断 `typeof` 操作符用于确定变量的基本数据类型,例如: - "string" - "number" - "boolean" - "undefined" 但对于引用类型如对象和数组,包括 `null`,它返回 "object"。 `instanceof` 用于检查对象是否为特定构造函数的实例,返回布尔值。它能准确识别数组等复杂类型,通过检查对象的原型链来确定其是否属于某个构造函数的实例。 两者结合使用可全面判断数据类型。
34 2