@babel/plugin-transform-private-property-in-object
情報
このプラグインは、ES2022で`@babel/preset-env`に含まれています。
例
入力
JavaScript
class Foo {
#bar = "bar";
test(obj) {
return #bar in obj;
}
}
出力
JavaScript
class Foo {
constructor() {
_bar.set(this, {
writable: true,
value: "bar",
});
}
test() {
return _bar.has(this);
}
}
var _bar = new WeakMap();
インストール
- npm
- Yarn
- pnpm
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
使用方法
設定ファイルを使用する(推奨)
babel.config.json
{
"plugins": ["@babel/plugin-transform-private-property-in-object"]
}
CLI経由
シェル
babel --plugins @babel/plugin-transform-private-property-in-object
Node API経由
JavaScript
require("@babel/core").transformSync("code", {
plugins: ["@babel/plugin-transform-private-property-in-object"],
});
オプション
loose
boolean
、デフォルトはfalse
。
注記
loose
モードの設定は、@babel/transform-class-properties
と同じである*必要があります*。
trueの場合、プライベートプロパティの`in`式は、`WeakSet`内での存在を確認する代わりに、オブジェクトの所有プロパティ(継承されたプロパティではなく)をチェックします。これにより、`Object.getOwnPropertyNames`などによって「プライベート」がリークする可能性がありますが、パフォーマンスとデバッグ(通常のプロパティアクセスと`.get()`)が向上します。
注意
トップレベルのprivateFieldsAsProperties
の仮定に移行することを検討してください。
babel.config.json
{
"assumptions": {
"privateFieldsAsProperties": true,
"setPublicClassFields": true
}
}
`privateFieldsAsProperties`と`setPublicClassFields`の両方を`true`に設定する必要があることに注意してください。
例
入力
JavaScript
class Foo {
#bar = "bar";
test(obj) {
return #bar in obj;
}
}
出力
JavaScript
class Foo {
constructor() {
Object.defineProperty(this, _bar, {
writable: true,
value: "bar",
});
}
test() {
return Object.prototype.hasOwnProperty.call(this, _bar);
}
}
var _bar = babelHelpers.classPrivateFieldLooseKey("bar");
ヒント
プラグインオプションの設定について詳しくは、こちらをご覧ください。