@babel/plugin-transform-private-property-in-object
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Este plugin está incluido en @babel/preset-env, como parte de ES2022
Ejemplo
Entrada
class Foo {
#bar = "bar";
test(obj) {
return #bar in obj;
}
}
Salida
class Foo {
constructor() {
_bar.set(this, {
writable: true,
value: "bar",
});
}
test() {
return _bar.has(this);
}
}
var _bar = new WeakMap();
Instalación
- npm
- Yarn
- pnpm
- Bun
npm install --save-dev @babel/plugin-transform-private-property-in-object
yarn add --dev @babel/plugin-transform-private-property-in-object
pnpm add --save-dev @babel/plugin-transform-private-property-in-object
bun add --dev @babel/plugin-transform-private-property-in-object
Uso
Mediante un archivo de configuración (Recomendado)
{
"plugins": ["@babel/plugin-transform-private-property-in-object"]
}
Mediante la CLI
babel --plugins @babel/plugin-transform-private-property-in-object
Mediante la API de Node
require("@babel/core").transformSync("code", {
plugins: ["@babel/plugin-transform-private-property-in-object"],
});
Opciones
loose
boolean, valor predeterminado: false.
La configuración del modo loose debe ser idéntica a la de @babel/transform-class-properties.
Cuando es true, las expresiones in para propiedades privadas verificarán las propiedades propias (en lugar de heredadas) del objeto, en vez de comprobar su presencia dentro de un WeakSet. Esto mejora el rendimiento y la depuración (acceso normal a propiedades vs .get()) a costa de posibles fugas de "privados" mediante métodos como Object.getOwnPropertyNames.
Considera migrar al supuesto de alto nivel privateFieldsAsProperties.
{
"assumptions": {
"privateFieldsAsProperties": true,
"setPublicClassFields": true
}
}
Ten en cuenta que tanto privateFieldsAsProperties como setPublicClassFields deben configurarse como true.
Ejemplo
Entrada
class Foo {
#bar = "bar";
test(obj) {
return #bar in obj;
}
}
Salida
class Foo {
constructor() {
Object.defineProperty(this, _bar, {
writable: true,
value: "bar",
});
}
test() {
return Object.prototype.hasOwnProperty.call(this, _bar);
}
}
var _bar = babelHelpers.classPrivateFieldLooseKey("bar");
Puedes leer más sobre cómo configurar opciones de plugins aquí