Skip to main content

7.2.0 发布:私有实例方法(Private Instance Methods)

· 4 min read

我们刚刚新发布了 Babel 的小版本。

此版本中包含对私有实例方法的支持以及一系列与 Flow 和 TypeScript 类型相关的错误修复。你可以在 Github 上阅读整个日志。

许多新的贡献者在此版本中参与修复了 bug 以及实现了新功能:感谢 GcaufyGrigory MorozPaul HappTim McClureVeaceslav Cotruta

Bloomberg 为私有类元素的实现提供了强有力的赞助,借此表示衷心的感谢!支持 private instance 方法是针对于 Babel 7.1.0 中 private static fields 的后续版本。

如果你或你的公司想要支持 Babel 和 JavaScript 的发展,但不确定如何操作,你可以通过 OpenCollective 向我们捐款,更好的方式是直接与我们合作完善/实现新的 ECMAScript 提案

私有实例方法(#8654)

JavaScript
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 DiGioiaJ. S. Choi 所做的工作,除了对 minimal version 进行支持外,@babel/parser 现在也能够解析 Smart 管道操作符

我们目前只支持 smart 管道操作符的 "core",并没有提供其他功能。我们目前也只初步支持 # 作为占位符。实际的占位符尚未确定,还存在其他占位符的可能,诸如 ?@ 以及 % 等,可能会在未来被 @babel/parser 实验性支持。

JavaScript
// "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:

JavaScript
const ast = babel.parse(code, {
plugins: [["pipelineOperator", { proposal: "smart" }]],
});

我们尚未支持转译这种语法,但它很快就会出现。

插件名 (#8769)

Babel 会为每个官方插件提供相应的名称。尽管这不会影响 Babel 的正常使用,但它为每个插件提供了始终如一的标识符。这对于像 Time Travel 所做的事情特别有用,它允许你准确地看到每个插件对你的代码都做了何种操作。你可以通过 repl 看到这一点:


Discuss on Twitter