跳至主内容

7.3.0 版本发布:命名捕获组、私有实例访问器和智能管道操作符

· 1 分钟阅读
非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

经过超过 80 次提交,最新的 Babel 次要版本终于发布了!

本次更新包含对正则表达式命名捕获组、私有实例访问器、智能管道操作符的支持,以及多项 TypeScript 解析改进。完整更新日志请查看 GitHub

感谢 @jamesgeorge007@armano2 提交的首个 PR!

Bloomberg 持续赞助 Babel 新类特性的实现:继提供静态私有字段私有实例方法后,他们刚刚实现了私有实例 getter/setter。

特别感谢 AMP 项目,他们将对 Babel 的赞助提升至 $24k/年,成为基础支持赞助商。

如果您或您的公司希望支持 Babel 和 JavaScript 的演进但不知如何参与,可通过 OpenCollective 进行捐赠,更棒的是直接参与新 ECMAScript 提案的实现!作为志愿者驱动的项目,我们依赖社区支持来资助服务广大 JavaScript 用户的工作,并维护代码所有权。

私有实例访问器(getter/setter)(#9101)

JavaScript
class Person {
#firstname = "Babel";
#lastname = "JS";

get #name() {
return this.#firstname + " " + this.#lastname;
}

sayHi() {
alert(`Hi, ${this.#name}!`);
}
}

感谢 Tim(来自 Bloomberg)实现该提案!

您可通过在配置中添加 @babel/plugin-proposal-private-methods(若自 Babel 7.2.0 起尚未添加),或在在线 REPL 启用 stage-3 预设来测试此新特性。

类的私有特性支持即将完成!

Class PrivateInstanceStatic
Fields
class A { #a = 1}
7.0.07.1.0
Methods
class A { #a() {} }
7.2.0
Accessors
class A { get #a() {} }
7.3.0

智能管道操作符 (#9179)

Babel 实现了该提案的多个变体,以协助 TC39 测试并收集社区反馈。与所有提案一样,未来可能会有变更。

Babel 7.2.0 版本中,我们已实现对智能管道操作符提案的解析支持。感谢 Thiago Arrais 的工作,您现在可以将其转译为标准的 ECMAScript 语法并进行试用!

当前我们仅支持该提案的核心功能,暂未实现任何附加特性。同时,管道操作符中暂不支持 yieldawait 关键字。

JavaScript
name
|> # || throw new TypeError()
|> doubleSay(#, ', ')
|> capitalize
|> # + '!'
|> new User.Message(#)
|> stream.write(#, { sync: true })
|> console.log;

您可通过 @babel/plugin-proposal-pipeline-operator 插件并设置 proposal: "smart" 选项在项目中启用此功能:

babel.config.json
{
"plugins": [
["@babel/plugin-proposal-pipeline-operator", { "proposal": "smart" }]
]
}

此前在 [v7.0.0-beta.3] 版本中已通过 #6335 支持 "minimal" 提案

命名捕获组 (#7105)

JavaScript
let stringRe = /(?<quote>"|')(?<contents>.*?)\k<quote>/;

let { contents } = `"foo bar"`.match(stringRe);

Babel 现已支持 ECMAScript 2018 中缺失的最大特性!此前可通过 Dmitry Soshnikov 开发的优秀社区插件 babel-plugin-transform-modern-regexp 实现命名捕获组的部分支持。我们还与 core-js 团队协作,通过全新的 @babel/plugin-transform-named-capturing-groups-regex 包提供完整支持。

@babel/preset-env 也已更新包含此功能,多数用户无需任何修改即可直接使用!

请注意:运行时特性(如 groups 属性)仅在完全支持 ES6 正则表达式的浏览器中生效。如需兼容旧环境,请为 RegExp 的方法添加 polyfill。

TypeScript 更新 (#9302, #9309)

感谢 Armano@babel/parser 以及 Henry/Brian@babel/generator 上的工作(您看过直播吗?),我们现已支持 TypeScript 2.9 新增的 let x: typeof import('./x'); 语法,并支持 TypeScript 3.2 引入的 bigint 类型关键字。

babel-eslint v11.0.0-beta.0:通过读取配置实现自动语法检测 (babel/babel-eslint#711)

感谢 Kai(同时担任 ESLint TSC 成员)完成此项工作!

此前 babel-eslint 需手动启用所有语法插件(且插件列表常出现滞后)。这还意味着它能解析 Babel 实例在编译时实际禁用的语法。现在我们将 @babel/core 设为 peerDependency,并假设使用 babel-eslint 时存在 Babel 配置,通过复用相同配置实现自我调整(此为破坏性变更)。此变更有望简化模块维护工作,同时复用 Babel 配置——这对使用 babel-eslint 的用户是合理假设。

您可以通过测试这个测试版是否适用于您的项目来帮助我们 🙂


在 Twitter 上讨论