Skip to main content

7.20.0 Released: Deno target and TypeScript 4.9

· 3 min read

We just published Babel 7.20.0!

This release includes support for TypeScript 4.9, and parser support for the Import Reflection and Explicit Resource Management Stage 2 proposals. Additionally, you can now use Deno as one of your compilation targets.

In the past few releases we have made gradual improvements @babel/generator's code location tracking, which lead to higher source map quality and better positioning of comments in the generated output.

We are also releasing version 9.0.0 of babel-loader, the Babel loader for Webpack.

You can read the whole changelog on GitHub.

If you or your company want to support Babel and the evolution of JavaScript, but aren't sure how, you can donate to us on our Open Collective and, better yet, work with us on the implementation of new ECMAScript proposals directly! As a volunteer-driven project, we rely on the community's support to fund our efforts in supporting the wide range of JavaScript users. Reach out at team@babeljs.io if you'd like to discuss more!

Highlights​

TypeScript 4.9 (#14211)​

TypeScript 4.9 introduces a new keyword operator, satisfies, that lets you assert that an expression has a given type without actually casting that expression:

let a = { x: 1, y: 2 } as const;
// ^ type is { x: 1, y: 2 }

let b = a satisfies { [key: string]: number };
// ^ type is still { x: 1, y: 2 }, and not { [key: string]: number }!

a satisfies { [key: string]: string };
// error! a does not satisfies that type

You can read more about this in the TypeScript 4.9 release post 😉.

Babel can now parse and strip away those annotations when using @babel/plugin-transform-typescript or @babel/preset-typescript, allowing you to start using the new TypeScript version.

Deno compilation target (#14944)​

When compiling for Deno, you can configure @babel/preset-env to only compile the features not supported by your Deno version. While Deno usually ships new ECMAScript features as soon as possible, you might need to support older engine versions.

You can enable it using the targets option:

JSON
{
"targets": { "deno": "1.20" },
"presets": ["@babel/preset-env"]
}

babel-loader 9.0.0​

This new major version of babel-loader drops support for Webpack < 5, for Babel < 7.12 and for Node.js < 14.15 LTS.

Loader options cannot be specified using the query parameters: instead of specifying options inline (for example, loader: "babel-loader?presets=@babel/preset-env") you will have to use the options object:

JavaScript
{
loader: "babel-loader",
options: {
presets: ["@babel/preset-env"]
}
}

You can also use a dedicated Babel configuration file, such as babel.config.json.

If you are not using query parameters to specify Babel options, and if you are on a modern version of Webpack, Babel and Node.js, you should be able to update without changes to your Webpack or Babel configurations.