OceanBase 开发者大会来啦!一起围观数据库前沿趋势!报名戳 了解详情
写点什么

Babel 7.7 发布:改进了 TypeScript 支持、顶级作用域 Await 等特性

  • 2020-01-25
  • 本文字数:1130 字

    阅读完需:约 4 分钟

Babel 7.7发布:改进了TypeScript支持、顶级作用域Await等特性

最近发布的Babel 7.7 现在可以解析顶级作用域 await、Flow enum 声明(Flow提案)了,并提供了从某些语法错误中恢复的选项。Babel 7.7 现在支持TypeScript 3.7,此外,它还引入了一个全新的可选的 babel.config.json 配置文件,以及其他一些特性和 bug 修复。


顶级作用域 await 使 ECMAScript 模块(ESM)能够 await 资源,从而导致 import 它们的其他模块在评估其主体之前等待。例如,第3阶段提案(Stage 3 proposal )允许开发人员有条件地加载依赖项或执行应用程序初始化:


// 动态依赖路径const strings = await import(`./i18n/${navigator.language}.mjs`);
// 资源初始化const connection = await dbConnector();
复制代码


顶级作用域 await 的使用是基于模块绑定器也是支持它的假设前提的。使用 Rollup 的开发人员可以启用experimentalTopLevelAwait选项。使用 webpack 5 的开发人员可以使用experiments.topLevelAwait选项。启动 Babel 7.7, @babel/preset-env 将自动启用 @babel/plugin-syntax-top-level-await(如果 caller 支持的话)。


默认情况下,每当遇到某些无效语法时,先前版本的 Babel 解析器都会引发错误。尽管这种行为适用于主要的 Babel 用例(比如,转译),但它会给来自其他 Babel 客户端(例如 babel-eslint 或 prettier)的其他用例带来一些不便。 Babel 7.7 在 @babel/parser 中添加了一个新的 errorRecovery 选项。当它设置为 true 时,生成的 AST 将具有 errors 属性,该属性包含了解析器能够从中恢复的所有错误。


Babel7.7 还改进了对TypeScript 3.7的支持。对于 Babel 中自 7.0 以来就支持的可选链(optional chaining) (a?.b) 和空值合并(nullish coalescing)(a ?? b),Babel 7.7 为开发人员提供了使用断言函数对类字段declare的可能性:


function assertString(x): assert x is string {  if (typeof x !== "string") throw new Error("It must be a string!");}
class Developer extends Person { declare usingBabel: boolean;}
复制代码


“allowDeclareFields”标志提供了对类字段的 declare 支持,并且 @babel/plugin-transform-typescript 和 @babel/preset-typescript 都支持“allowDeclareFields”标志。


Babel 7.7.0 还提供了对新 babel.config.json 配置文件的支持,其作用与 babel.config.js 的相同。全新的 JSON 格式具有更好的可缓存性和可序列化性。


Babel 7.7 版本还附带了许多bug的修复和其他改进特性,包括内存使用方面的改进


Babel 是基于 MIT 开源许可的。欢迎开发者通过Babel GitHub组织参与贡献,并且遵循 Babel 的贡献指南行为准则。也可以通过Open Collective的方式进行捐款来支持该项目。


原文链接:


Babel 7.7 Released With Improved TypeScript Support, Top-Level Await and More


2020-01-25 09:003835

评论 1 条评论

发布
用户头像
标题和内容不一致?
2020-01-30 11:44
回复
没有更多了
发现更多内容

练习英语口语的误区

董一凡

学习

严选合伙人(一)

Neco.W

创业 合伙人 初创公司

看完这篇操作系统,和面试官扯皮就没问题了

cxuan

操作系统 计算机基础

敏捷团队成员的工作量指标真的那么重要吗?

金生水起

敏捷开发 Scrum精髓 敏捷精髓 Agile

Android | Tangram动态页面之路(一)需求背景

哈利迪

android

spring注入bean的几种策略模式

王德发

Java Spring Boot 测试驱动开发实战营

一杯茶的时间,上手 Node.js

图雀社区

node.js

JVM源码分析之深入分析Object类finalize()方法的实现原理

猿灯塔

JVM

ClickHouse为何如此之快?

nauu

数据库 大数据 OLAP Clickhouse

何时开始重构?

Page

敏捷开发 重构

搜商:高效的使用搜索引擎

石云升

高效搜索 搜索技巧 搜商

KK日知录20200515

kimmking

如何认识更多的朋友扩展社交朋友圈的质量

吃素的左撇子

人生 人脉

MySQL索引知识介绍

Simon

MySQL 索引结构

【大咖说问大咖】关于开源的那些事 —— PingCAP CTO 黄东旭 Q&A 交流帖

InfoQ写作社区官方

开源 写作平台 大咖说 技术交流 热门活动

Kafka零数据丢失的配置方案

奈学教育

kafka kafka配置 kafka数据

为什么我喜欢的大V拉黑我?

lmymirror

经历 后真相时代 日常思考

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (七)CORRECT边界条件

编程道与术

Java 编程 软件测试 TDD 单元测试

Java并发之AQS源码分析

指尖流逝

Java

Linux 容器化技术的前世今生(虚拟化、容器化、Docker)

Meandni

Docker 云计算 Linux 容器 虚拟机

如何优雅的实现分布式锁

飘渺Jam

redis zookeeper 分布式锁

Java 中的 Mysql 时区问题

张晓辉

游戏夜读 | 预测问题的硬核是?

game1night

从ClickHouse的名字由来讲起

nauu

数据库 大数据 分布式 OLAP Clickhouse

数据分析的利器-clickhouse概述

流沙

数据库 Clickhouse

工程师、程序员和产品经理

王泰

程序员 产品经理 IT 软件工程师 工程师思维

基于环信sdk在uni-app中快速开发多平台社交Demo

DT极客

个人技术成长与发展

颇风

后端 技术人

提升编程效率:重构

Page

高效工作 敏捷开发 重构 高效

Serverless: 2020年函数计算的冷启动怎么样了

刘宇

太赞了,VSCode 上也能画流程图了!

GitHubDaily

visual-studio GitHub 程序员 vscode 开发者工具

Babel 7.7发布:改进了TypeScript支持、顶级作用域Await等特性_语言 & 开发_Bruno Couriol_InfoQ精选文章