@babel/plugin-transform-private-property-in-object
Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →
Ce plugin est inclus dans @babel/preset-env, dans ES2022
Exemple
Entrée
class Foo {
#bar = "bar";
test(obj) {
return #bar in obj;
}
}
Sortie
class Foo {
constructor() {
_bar.set(this, {
writable: true,
value: "bar",
});
}
test() {
return _bar.has(this);
}
}
var _bar = new WeakMap();
Installation
- 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
Utilisation
Avec un fichier de configuration (Recommandé)
{
"plugins": ["@babel/plugin-transform-private-property-in-object"]
}
Via CLI
babel --plugins @babel/plugin-transform-private-property-in-object
Via l'API Node
require("@babel/core").transformSync("code", {
plugins: ["@babel/plugin-transform-private-property-in-object"],
});
Options
loose
boolean, valeur par défaut : false.
Le paramètre de configuration loose doit être identique à celui de @babel/transform-class-properties.
Lorsqu'activé, les expressions in sur des propriétés privées vérifieront les propriétés propres (par opposition aux héritées) de l'objet, au lieu de contrôler leur présence dans un WeakSet. Cela améliore
les performances et le débogage (accès normal aux propriétés vs .get()) au détriment
d'un risque potentiel de fuite des "privés" via des méthodes comme Object.getOwnPropertyNames.
Envisagez de migrer vers l'hypothèse de haut niveau privateFieldsAsProperties.
{
"assumptions": {
"privateFieldsAsProperties": true,
"setPublicClassFields": true
}
}
Notez que privateFieldsAsProperties et setPublicClassFields doivent tous deux être définis sur true.
Exemple
Entrée
class Foo {
#bar = "bar";
test(obj) {
return #bar in obj;
}
}
Sortie
class Foo {
constructor() {
Object.defineProperty(this, _bar, {
writable: true,
value: "bar",
});
}
test() {
return Object.prototype.hasOwnProperty.call(this, _bar);
}
}
var _bar = babelHelpers.classPrivateFieldLooseKey("bar");
Vous pouvez en savoir plus sur la configuration des options de plugin ici