Skip to main content

7.16.0 发布: ESLint 8 和 TypeScript 4.5

· 4 min read

我们刚刚发布了 Babel 7.16.0!

此版本默认启用 类静态初始化块。它不仅支持 管道操作符 提案的新变体,还提升了对 TypeScript 4.5 的兼容。

此外,@babel/eslint-parser 现已支持 ESLint 8.

你可以 在 GitHub 上 阅读完整的更新日志。

如果你或你的公司希望支持 Babel 和 JavaScript 的发展,但不知道该如何资助我们,你可以在我们的 Open Collective上给我们捐款,比这更好的方式是,直接与我们合作实现 新的 ECMAScript 提案!作为一个靠志愿者驱动的项目,我们依靠社区的支持,来资助我们更努力地为广泛的 JavaScript 用户提供更好的支持。如果你想讨论更多内容,请联系 team@babeljs.io

亮点

默认启用类静态初始化块 (#13713)

JavaScript
class MyClass {
static {
doSomeInitialization(MyClass);
console.log("MyClass initialized!");
}
}

八月份进入第 4 阶段 的静态初始化块,现在在 @babel/parser@babel/preset-env 中默认启用。

如果你使用的是 classStaticBlock 解析器插件,或是 @babel/plugin-syntax-class-static-block,你可以安全地将它们从配置中移除。

如果你已经在使用 @babel/preset-env,你现在可以从你的配置中删除 @babel/plugin-proposal-class-static-block

TypeScript 4.5 特性 (#13802, #13838)

TypeScript 4.5 引入了用于将导入标记为 type-only 的新语法:你可以标记单个说明符,而不是标记整个 import 语句:

// TypeScript 4.4
import type { Foo } from "my-module";
import { fooInstance } from "my-module";

// TypeScript 4.5
import { type Foo, fooInstance } from "my-module";

它还支持两个新的文件扩展名:.mts.cts,即 .mjs.cjs 的镜像。在启用 @babel/preset-typescript 的情况下将 .mts.cts 文件传递给 Babel 时,它会使用文件扩展名来检测所需的源类型("module""script")。

默认情况下,.mts.cts 文件不能包含 JSX 代码,因为它们不能包含与 JSX 会有歧义的 TypeScript 批注(<Type> cast<T>() => {})。

你可以 在他们的博客上 阅读完整的 TypeScript 4.5 发布博文。

^ Hack-style 管道的主题 token (#13749)

管道操作符 提案的拥护者正在考虑 各种主题 token(对上一个管道步骤中的值的引用)。

@babel/plugin-proposal-pipeline-operator(和 "pipelineOperator" 解析器插件)现在支持其中三个:#, ^%

JavaScript
let values = getNames()
|> ["default"].concat(^)
|> await loadValues(^);

You can enable the current version of the pipeline operator proposal using the proposal: "hack" option, and you can choose the topic token using topicToken: "^":

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

@babel/eslint-parser 中的 ESLint 8 支持 (#13782)

@babel/eslint-parser 现已支持 ESLint 8:你可以更新你的 "eslint" 依赖,它就会正常工作。

如果你是 ESLint 插件作者,注意类字段和私有方法在 AST 当使用 ESLint 7 时,它们遵循 Babel AST shape;当使用 ESLint 8 时,它们遵循 ESLint 和 ESTree 规范。这是因为 ESLint 从 ESLint 8 开始引入了对这些新的类特性的支持。