[Proposal] Optional spreading

Beknar Askarov beknaraskarov at gmail.com
Fri Aug 23 02:55:18 UTC 2019


@Scott My mistake empty string [...""] is spreadable.
But not sure if it is desirable behavior.


On Fri, 23 Aug 2019, 04:42 Beknar Askarov, <beknaraskarov at gmail.com> 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, <scottrudiger at gmail.com> 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 <beknaraskarov at gmail.com>
>> 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
>>> es-discuss at mozilla.org
>>> https://mail.mozilla.org/listinfo/es-discuss
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20190823/537bd77e/attachment-0001.html>


More information about the es-discuss mailing list