Saltar al contenido principal

7.16.0 Publicado: ESLint 8 y TypeScript 4.5

· 4 min de lectura
Traducción Beta No Oficial

Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →

¡Acabamos de publicar Babel 7.16.0!

Esta versión habilita por defecto los bloques de inicialización estática de clases. Incluye soporte para una nueva variante de la propuesta del operador de tubería, así como compatibilidad con TypeScript 4.5.

Además, @babel/eslint-parser ahora es compatible con ESLint 8.

Puedes consultar el registro completo de cambios en GitHub.

Si tú o tu empresa quieren apoyar a Babel y la evolución de JavaScript, pero no están seguros de cómo, pueden donarnos en nuestro Open Collective y, aún mejor, trabajar directamente con nosotros en la implementación de nuevas propuestas de ECMAScript! Como proyecto impulsado por voluntarios, dependemos del apoyo de la comunidad para financiar nuestros esfuerzos en dar soporte a la amplia variedad de usuarios de JavaScript. ¡Contáctanos en team@babeljs.io si quieres conversar más!

Destacados

Bloques estáticos de clases habilitados por defecto (#13713)

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

Los bloques estáticos, que alcanzaron la Etapa 4 en agosto, ahora están habilitados por defecto en @babel/parser y @babel/preset-env.

Si estabas usando el plugin de análisis classStaticBlock, o @babel/plugin-syntax-class-static-block, puedes eliminarlos de tu configuración de forma segura.

Si ya usas @babel/preset-env, ahora puedes eliminar @babel/plugin-proposal-class-static-block de tu configuración.

Características de TypeScript 4.5 (#13802, #13838)

TypeScript 4.5 introduce una nueva sintaxis para marcar imports como solo de tipo: en lugar de marcar toda la sentencia import, puedes marcar un especificador individual:

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

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

También soporta dos nuevas extensiones de archivo: .mts y .cts, que reflejan .mjs y .cjs. Al pasar un archivo .mts o .cts a Babel con @babel/preset-typescript habilitado, utiliza la extensión de archivo para detectar el tipo de fuente deseado ("module" o "script").

Por defecto, los archivos .mts y .cts no pueden contener código JSX, pero tampoco pueden contener anotaciones de TypeScript que serían ambiguas con JSX (<Type> cast y <T>() => {}).

Puedes leer la publicación completa de TypeScript 4.5 en su blog.

Token ^ para tuberías estilo Hack (#13749)

Los responsables de la propuesta del operador de tubería están evaluando varios tokens de contexto (la referencia al valor del paso anterior en la tubería).

@babel/plugin-proposal-pipeline-operator (y el plugin de análisis "pipelineOperator") ahora soportan tres de ellos: #, ^ y %.

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

Puedes habilitar la versión actual de la propuesta del operador pipeline usando la opción proposal: "hack", y seleccionar el token de tema mediante topicToken: "^":

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

Soporte para ESLint 8 en @babel/eslint-parser (#13782)

@babel/eslint-parser ahora es compatible con ESLint 8: puedes actualizar tu dependencia "eslint" y funcionará correctamente.

Si desarrollas plugins para ESLint, ten en cuenta el cambio incompatible en el AST para campos de clase y métodos privados: al usar ESLint 7 siguen la estructura del AST de Babel; con ESLint 8 siguen la implementación de ESLint y la especificación ESTree. Esto ocurre porque ESLint añadió soporte para estas nuevas características de clase a partir de la versión 8.