And it does result in empty array [...''] -> []
So not much difference even if it passes through. Everything else would result in error if check was only nullish On Fri, 23 Aug 2019, 04:55 Beknar Askarov, <[email protected]> wrote: > @Scott My mistake empty string [...""] is spreadable. > But not sure if it is desirable behavior. > > > On Fri, 23 Aug 2019, 04:42 Beknar Askarov, <[email protected]> > wrote: > >> Indeed. I see your point. >> >> But it really needs to be falsy check. >> Since falsy values are not "spreadable" >> >> >> >> On Fri, 23 Aug 2019, 03:52 Scott Rudiger, <[email protected]> wrote: >> >>> I like it; code seems cleaner to me with its use. However, since the >>> syntax is so similar to optional chaining, it's too bad your goal with this >>> sample is to check for falsey values rather than nullish values. >>> >>> [ 1, ?...(condition && [2, 3]), // no extras:) 3, ] >>> >>> On Thu, Aug 22, 2019, 6:01 PM Beknar Askarov <[email protected]> >>> wrote: >>> >>>> Problem >>>> >>>> Spreading is great! It contributes towards "declerativity" of the >>>> language and reduces verbosity. I see one more feature to add to improve >>>> it. >>>> >>>> Consider following >>>> >>>> [ >>>> 1, >>>> condition && 2, >>>> condition && 3, >>>> 4, >>>> ].filter(Boolean) // filtering needed to remove falsy values >>>> // Results in >>>> [1, 2, 3, 4] // if condition is `truthy`// and >>>> [1, 4] // if not truthy. >>>> >>>> Another way to achieve the same result without the need of filtering >>>> after >>>> >>>> [ >>>> 1, >>>> ...(condition ? [2, 3] : []), // note extra [] in the end, to avoid >>>> errors >>>> 4, >>>> ] >>>> >>>> Similar pattern with objects >>>> >>>> { >>>> ...(condition ? { foo: 'bar' } : {}), // extra {} >>>> } >>>> >>>> Another pattern is when condition is the object itself, when it is >>>> known that type is one or falsy >>>> >>>> [ >>>> item1, >>>> item2, >>>> ...(itemsOrNull || []) // extra [] >>>> ] >>>> >>>> Similar for objects >>>> >>>> { >>>> ...(obj || {}), // extra {} >>>> } >>>> >>>> I see these patterns appearing very often. And these are cleanest >>>> examples I have seen so far. >>>> ProposalOptional spreadingWith condition >>>> >>>> // Arrays >>>> [ >>>> 1, >>>> ?...(condition && [2, 3]), // no extras:) >>>> 3, >>>> ]// Objects >>>> { >>>> ?...(condition && { foo: 'bar' }) // no extras:) >>>> } >>>> >>>> When condition is the object >>>> >>>> [ >>>> item1, >>>> item2, >>>> ?...itemsOrNull // no extras at all:) even (...) >>>> ] >>>> >>>> These look nicer and can be good for performance since (?...), since >>>> no cleanup is needed after to remove falsy values or extra spreading even >>>> when it is not needed. >>>> >>>> Looks intuitive (since: >>>> https://github.com/tc39/proposal-optional-chaining) >>>> Plays nice with typeings. >>>> >>>> What do you think? https://es.discourse.group/t/optional-spreading/93 >>>> _______________________________________________ >>>> es-discuss mailing list >>>> [email protected] >>>> https://mail.mozilla.org/listinfo/es-discuss >>>> >>>
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

