🐊Putout plugin adds ability apply optional chaining
npm install @putout/plugin-apply-optional-chaining[NPMIMGURL]: https://img.shields.io/npm/v/@putout/plugin-apply-optional-chaining.svg?style=flat&longCache=true
[NPMURL]: https://npmjs.org/package/@putout/plugin-apply-optional-chaining "npm"
> The optional chaining operator (?.) enables you to read the value of a property located deep within a chain of connected objects without having to check that each reference in the chain is valid.
>
> The ?. operator is like the . chaining operator, except that instead of causing an error if a reference is nullish (null or undefined), the expression short-circuits with a return value of undefined. When used with function calls, it returns undefined if the given function does not exist.
>
> This results in shorter and simpler expressions when accessing chained properties when the possibility exists that a reference may be missing. It can also be helpful while exploring the content of an object when there's no known guarantee as to which properties are required.
>
> (c) MDN
🐊Putout plugin applies optional chaining. Backward to convert-optional-to-logical. Merged to @putout/plugin-optional-chaining.
```
npm i @putout/plugin-apply-optional-chaining
`json`
{
"rules": {
"apply-optional-chaining/use": "on",
"apply-optional-chaining/assign": "off"
}
}
Checkout out in 🐊Putout Editor.
`js
const result = hello && hello.world;
if (typeof a === 'function' && a(1, 2))
alert();
`
`js
const result = hello?.world;
if (a?.(1, 2))
alert();
`
> Proposal to add support for optional chaining on the left of assignment operators: a?.b = c.
>
> (c) Proposal of Optional Chaining Assignment
Disabled by default. Checkout out in 🐊Putout Editor.
`js
if (a) {
a.b = 5;
}
if (a)
a.b = 5;
a && (a.b = 5);
`
`js``
a?.b = 5;
MIT