我们刚刚新发布了 Babel 的小版本。
此版本中包含对私有实例方法的支持以及一系列与 Flow 和 TypeScript 类型相关的错误修复。你可以在 Github 上阅读整个日志。
许多新的贡献者在此版本中参与修复了 bug 以及实现了新功能:感谢 Gcaufy,Grigory Moroz,Paul Happ,Tim McClure 和 Veaceslav Cotruta!
Bloomberg 为私有 类元素的实现提供了强有力的赞助,借此表示衷心的感谢!支持 private instance 方法是针对于 Babel 7.1.0 中 private static fields 的后续版本。
如果你或你的公司想要支持 Babel 和 JavaScript 的发展,但不确定如何操作,你可以通过 OpenCollective 向我们捐款,更好的方式是直接与我们合作完善/实现新的 ECMAScript 提案!
私有实例方法(#8654)
class Person {
#age = 19;
#increaseAge() {
this.#age++;
}
birthday() {
this.#increaseAge();
alert("Happy Birthday!");
}
}
感谢 Tim 实现了该提案,以及 Nicolò 和 Justin 对代码进行了 review !
你可以将 @babel/plugin-proposal-private-methods
插件添加到 Babel 配置或在 repl 中启用 stage-3
preset 来测试私有方法。
私有访问器(accessors)也即将发布,并且我们内部进行了重大的重构,这使得我们 可以快速的为装饰器添加对私有元素的支持 🎉。
"Smart" 管道操作符解析(#8289)
感谢 James DiGioia 和 J. S. Choi 所做的工作,除了对 minimal version 进行支持外,@babel/parser
现在也能够解析 Smart 管道操作符。
我们目前只支持 smart 管道操作符的 "core",并没有提供其他功能。我们目前也只初步支持 #
作为占位符。实际的占位符尚未确定,还存在其他占位符的可能,诸如 ?
,@
以及 %
等,可能会在未来被 @babel/parser
实验性支持。
// "Smart"
const result = 2 |> double |> 3 + # |> toStringBase(2, #); // "111"
// "Simple"
const result = 2 |> double |> (x => 3 + x) |> (x => toStringBase(2, x));
Babel 会实现此提案的多种变体,以帮助 TC39 测试并收集社区的反馈。与所有提案一样,该提案未来可能会发生改变。
如果你直接使用 @babel/parser
并且想测试该提案,你可以将 proposal: "smart"
选项传递给 pipeline plugin:
const ast = babel.parse(code, {
plugins: [["pipelineOperator", { proposal: "smart" }]],
});
我们尚未支持转译这种语法,但它很快就会出现。
插件名 (#8769)
Babel 会为每个官方插件提供相应的名称。尽管这不会影响 Babel 的正常使用,但它为每个插件提供了始终如一的标识符。这对于像 Time Travel 所做的事情特别有用,它允许你准确地看到每个插件对你的代码都做了何种操作。你可以通过 repl 看到这一点: