@babel/plugin-transform-optional-chaining
Traduzione Beta Non Ufficiale
Questa pagina è stata tradotta da PageTurner AI (beta). Non ufficialmente approvata dal progetto. Hai trovato un errore? Segnala problema →
informazioni
Questo plugin è incluso in @babel/preset-env, in ES2020
Esempio
Accesso a proprietà profondamente annidate
JavaScript
const obj = {
foo: {
bar: {
baz: 42,
},
},
};
const baz = obj?.foo?.bar?.baz; // 42
const safe = obj?.qux?.baz; // undefined
// Optional chaining and normal chaining can be intermixed
obj?.foo.bar?.baz; // Only access `foo` if `obj` exists, and `baz` if
// `bar` exists
// Example usage with bracket notation:
obj?.["foo"]?.bar?.baz; // 42
Chiamata di funzioni profondamente annidate
JavaScript
const obj = {
foo: {
bar: {
baz() {
return 42;
},
},
},
};
const baz = obj?.foo?.bar?.baz(); // 42
const safe = obj?.qux?.baz(); // undefined
const safe2 = obj?.foo.bar.qux?.(); // undefined
const willThrow = obj?.foo.bar.qux(); // Error: not a function
// Top function can be called directly, too.
function test() {
return 42;
}
test?.(); // 42
exists?.(); // undefined
Costruzione di classi profondamente annidate
JavaScript
const obj = {
foo: {
bar: {
baz: class {
},
},
},
};
const baz = new obj?.foo?.bar?.baz(); // baz instance
const safe = new obj?.qux?.baz(); // undefined
const safe2 = new obj?.foo.bar.qux?.(); // undefined
const willThrow = new obj?.foo.bar.qux(); // Error: not a constructor
// Top classes can be called directly, too.
class Test {
}
new Test?.(); // test instance
new exists?.(); // undefined
Eliminazione di proprietà profondamente annidate
Aggiunto in: v7.8.0
JavaScript
const obj = {
foo: {
bar: {},
},
};
const ret = delete obj?.foo?.bar?.baz; // true
Installazione
- npm
- Yarn
- pnpm
- Bun
npm install --save-dev @babel/plugin-transform-optional-chaining
yarn add --dev @babel/plugin-transform-optional-chaining
pnpm add --save-dev @babel/plugin-transform-optional-chaining
bun add --dev @babel/plugin-transform-optional-chaining
Utilizzo
Con un file di configurazione (Consigliato)
babel.config.json
{
"plugins": ["@babel/plugin-transform-optional-chaining"]
}
Tramite CLI
Shell
babel --plugins @babel/plugin-transform-optional-chaining script.js
Tramite Node API
JavaScript
require("@babel/core").transformSync("code", {
plugins: ["@babel/plugin-transform-optional-chaining"],
});
Opzioni
loose
boolean, predefinito false.
Quando è true, questa trasformazione simulerà che document.all non esista
ed eseguirà controlli di uguaglianza approssimativa con null invece di controlli di uguaglianza stretta
sia per null che per undefined.
attenzione
Considera di migrare all'assunzione di primo livello noDocumentAll.
babel.config.json
{
"assumptions": {
"noDocumentAll": true
}
}
Esempio
Input
JavaScript
foo?.bar;
Output (noDocumentAll === true)
JavaScript
foo == null ? void 0 : foo.bar;
Output (noDocumentAll === false)
JavaScript
foo === null || foo === void 0 ? void 0 : foo.bar;
consiglio
Maggiori informazioni sulla configurazione delle opzioni del plugin sono disponibili qui