Saltar al contenido principal

7.3.0 Publicado: Grupos de captura con nombre, accesores de instancia privados y tuberías inteligentes

· 6 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 →

¡Después de más de 80 commits, la última versión menor de Babel ya está aquí!

Esta versión incluye soporte para grupos de captura con nombre en expresiones regulares, accesores de instancia privados, el operador de tubería inteligente y varias mejoras en el análisis de TypeScript. Puedes leer el registro de cambios completo en GitHub.

¡Gracias a @jamesgeorge007 y @armano2 por su primer PR!

Bloomberg continúa patrocinando la implementación de nuevas características de clases en Babel: después de proporcionarnos campos privados estáticos y métodos de instancia privados, acaban de implementar getters y setters de instancia privados.

Otro reconocimiento para el AMP Project, que aumentó su apoyo a Babel a $24k/año convirtiéndose en Base Support Sponsor.

Si tú o tu empresa quieren apoyar a Babel y la evolución de JavaScript pero no saben cómo, pueden donarnos en OpenCollective y, mejor aún, ¡trabajar directamente con nosotros implementando nuevas propuestas de ECMAScript! Como proyecto impulsado por voluntarios, dependemos del apoyo comunitario para financiar nuestros esfuerzos en atender a la amplia variedad de usuarios de JavaScript y mantener la propiedad del código.

Accesores de instancia privados (getters y setters) (#9101)

JavaScript
class Person {
#firstname = "Babel";
#lastname = "JS";

get #name() {
return this.#firstname + " " + this.#lastname;
}

sayHi() {
alert(`Hi, ${this.#name}!`);
}
}

¡Gracias a Tim (Bloomberg) por implementar esta propuesta!

Puedes probar esta nueva característica agregando @babel/plugin-proposal-private-methods a tu configuración (si aún no lo hiciste desde Babel 7.2.0) o activando el preset stage-3 en el REPL en línea.

¡El soporte para características privadas de clases está casi completo!

Class PrivateInstanceStatic
Fields
class A { #a = 1}
7.0.07.1.0
Methods
class A { #a() {} }
7.2.0
Accessors
class A { get #a() {} }
7.3.0

Operador de tubería inteligente (#9179)

Babel implementa múltiples variantes de esta propuesta para ayudar a TC39 a probar y recopilar retroalimentación de la comunidad. Como con todas las propuestas, espera cambios en el futuro.

En Babel 7.2.0 implementamos soporte de análisis para la propuesta del Operador de Tubería Inteligente. ¡Gracias al trabajo de Thiago Arrais, ahora puedes transpilarlo a ECMAScript estándar y probarlo!

Actualmente solo admitimos la propuesta principal, y ninguna de las funcionalidades adicionales. Tampoco soportamos yield ni await en tuberías aún.

JavaScript
name
|> # || throw new TypeError()
|> doubleSay(#, ', ')
|> capitalize
|> # + '!'
|> new User.Message(#)
|> stream.write(#, { sync: true })
|> console.log;

Puedes activarlo en tu proyecto usando el plugin @babel/plugin-proposal-pipeline-operator con la opción proposal: "smart":

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

Anteriormente, la propuesta "mínima" se añadió en [v7.0.0-beta.3] mediante #6335

Grupos de captura con nombre (#7105)

JavaScript
let stringRe = /(?<quote>"|')(?<contents>.*?)\k<quote>/;

let { contents } = `"foo bar"`.match(stringRe);

¡El soporte para la mayor característica de ECMAScript 2018 que faltaba en Babel ya está aquí! Anteriormente, existía soporte parcial para grupos con nombre mediante el excelente plugin comunitario babel-plugin-transform-modern-regexp de Dmitry Soshnikov. También coordinamos esfuerzos con core-js para ofrecer soporte completo con el nuevo paquete @babel/plugin-transform-named-capturing-groups-regex.

@babel/preset-env también se ha actualizado para incluirlo, ¡así que muchos de vosotros podréis usarlo sin realizar ningún cambio!

Ten en cuenta que las funcionalidades en tiempo de ejecución (como la propiedad groups) solo funcionan en navegadores con soporte adecuado para expresiones regulares ES6. Si necesitas dar soporte a entornos antiguos, puedes incluir un polyfill para los métodos de RegExp.

Actualizaciones de TypeScript (#9302, #9309)

Gracias al trabajo de Armano en @babel/parser y de Henry/Brian en @babel/generator (¿has visto el stream en directo?), ahora admitimos let x: typeof import('./x');, añadido en TypeScript 2.9. También soportamos la palabra clave de tipo bigint, añadida en TypeScript 3.2.

babel-eslint v11.0.0-beta.0: Detección automática de sintaxis mediante lectura de configuración (babel/babel-eslint#711)

¡Gracias a Kai (también miembro del TSC de ESLint) por finalizar este trabajo!

Hasta ahora, babel-eslint activaba manualmente todos los plugins de sintaxis (con la lista quedando obsoleta frecuentemente). Esto significaba que podía analizar sintaxis que una instancia configurada de Babel no permitía en tiempo de compilación. Ahora requerimos @babel/core como peerDependency y asumimos que existe una configuración de Babel al usar babel-eslint, utilizando esa misma configuración para modificarse a sí mismo (lo que constituye un cambio importante). Este cambio debería facilitar el mantenimiento del módulo y reutilizar la configuración de Babel, una suposición razonable para usuarios que emplean babel-eslint.

Puedes ayudarnos comprobando si esta versión beta funciona para tu proyecto 🙂


Discutir en Twitter