Here is a little decision tree of the issues. [image: Inline image 1]
On Tue, Sep 6, 2016 at 6:49 PM, Isiah Meadows <[email protected]> wrote: > > Isiah's workaround works but has the unfortunate side affect of copying > values / increasing reference counts to objects. I'd love to see a built in > solution. > > You'd have to do that anyways, even if it's entirely internal. How do you > think you would do it outside of copying the values? > > On Mon, Sep 5, 2016, 19:45 Kris Siegel <[email protected]> wrote: > >> Hmm I gotta say I must have re-read that minimally extended dot notation >> proposal a few times and I just find the syntax confusing. I do like the >> idea of building a way of taking a portion of an object out of one object >> and into another but I don't think we need to provide additional syntax >> rules to handle this. Why couldn't this be an Object.pick() addition where >> it works similar to the underscore implementation? It could even be >> expanded to handle deep nesting (I'm actually adding this to my msngr.js >> library in the next release as grabbing a subset of an object is crazy >> useful and I need to do it far too frequently). >> >> Isiah's workaround works but has the unfortunate side affect of copying >> values / increasing reference counts to objects. I'd love to see a built in >> solution. >> >> On Mon, Sep 5, 2016 at 2:38 PM, Isiah Meadows <[email protected]> >> wrote: >> >>> TypeScript has a fair number of proposals aiming to address this (things >>> like difference types, partial types, etc.), but in general, I find it just >>> as easy to do it this way (which is easily checked): >>> >>> ```js >>> const {toDate, fromDate, location, flavor} = this.state; >>> const goodKeys = {toDate, fromDate, location, flavor}; >>> ``` >>> >>> On Fri, Sep 2, 2016, 16:08 Bob Myers <[email protected]> wrote: >>> >>>> Here's another StackOverflow question >>>> <http://stackoverflow.com/questions/39299046/destructuring-a-subset-of-an-object-directly-into-a-new-object> >>>> essentially asking for pick notation. This same question pops up regularly. >>>> It's the real world talking to us telling us what they need. In this >>>> particular case, the solution with extended dot notation would just be >>>> >>>> ``` >>>> var goodKeys = this.state.{toDate, fromDate, location, flavor}; >>>> ``` >>>> >>>> Perhaps I have not posted the minimal version of my proposal for this >>>> pick notation >>>> <https://github.com/rtm/js-pick-notation/blob/master/minimal/spec.md>, >>>> also known as extended dot notation. >>>> This version sacrifices some features in favor of complete >>>> compatibility with existing destructuring syntax following the dot. >>>> >>>> There is another good reason these days for thinking about something >>>> about this: *the advent of typed dialects of JS*. >>>> We already know that a simple lodash-type version of pick, such as >>>> >>>> ``` >>>> function pick(o, keys) { >>>> return Object.assign({}, ...keys.map(key => ({[key]: o[key]}))); >>>> } >>>> >>>> const o = {a:1, b: 2}; >>>> const o2 = pick(o, ['a']); >>>> ``` >>>> >>>> cannot handle renaming or defaults or deep picking, but in addition *it >>>> cannot also not be typed properly*. >>>> For instance, `lodash.d.ts` defines `pick` as: >>>> >>>> ``` >>>> pick<TResult extends {}, T extends {}>( >>>> object: T, >>>> ...predicate: (StringRepresentable|StringRepresentable[])[] >>>> ): TResult; >>>> ``` >>>> >>>> with no type safety whatsoever. >>>> >>>> In contrast, with pick notation >>>> >>>> ``` >>>> const o2 = o.{a}; >>>> ``` >>>> >>>> `o2` can be precisely typed by the compiler as an object containing the >>>> property `a`, or a type compatible or assignable to that type. >>>> >>>> -- >>>> Bob >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> _______________________________________________ >>>> 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 >>> >>> >>
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

