跳至主内容

7.16.0 发布:支持 ESLint 8 和 TypeScript 4.5

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

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

我们刚刚发布了 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!");
}
}

静态块已于今年八月进入 Stage 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 引入了新的类型导入标记语法:无需标记整个导入语句,您可单独标记特定导入项:

// 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 时,Babel 将通过扩展名自动识别源码类型("module""script")。

默认情况下,.mts.cts 文件不支持 JSX 代码,且不能包含与 JSX 语法冲突的 TypeScript 注解(如 <Type> cast<T>() => {})。

完整 TypeScript 4.5 发布说明请参阅官方博客

Hack 风格管道操作符支持 ^ 主题标记 (#13749)

管道操作符提案的倡导者们正在评估多种主题标记方案(即引用前序管道步骤值的语法)。

@babel/plugin-proposal-pipeline-operator(及 "pipelineOperator" 解析器插件)现已支持三种标记:#^%

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

您可以通过 proposal: "hack" 选项启用当前版本的管道运算符提案,并使用 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 结构;使用 ESLint 8 时则遵循 ESLint 的 ESTree 规范。这是因为 ESLint 从 8.0 版本开始原生支持这些新的类特性。