<p dir="ltr">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):</p>
<p dir="ltr">```js<br>
const {toDate, fromDate, location, flavor} = this.state;<br>
const goodKeys = {toDate, fromDate, location, flavor};<br>
```</p>
<br><div class="gmail_quote"><div dir="ltr">On Fri, Sep 2, 2016, 16:08 Bob Myers <<a href="mailto:rtm@gol.com">rtm@gol.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><a href="http://stackoverflow.com/questions/39299046/destructuring-a-subset-of-an-object-directly-into-a-new-object" target="_blank">Here's another StackOverflow question</a> 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<div><br></div><div>```</div><div><div>var goodKeys = this.state.{toDate, fromDate, location, flavor};</div><div>```</div><div><br></div><div>Perhaps I have not posted the <a href="https://github.com/rtm/js-pick-notation/blob/master/minimal/spec.md" target="_blank">minimal version of my proposal for this pick notation</a>, also known as extended dot notation.</div></div><div>This version sacrifices some features in favor of complete compatibility with existing destructuring syntax following the dot.</div><div><br></div><div>There is another good reason these days for thinking about something about this: <u>the advent of typed dialects of JS</u>.</div><div>We already know that a simple lodash-type version of pick, such as </div><div><br></div><div>```</div><div>function pick(o, keys) {</div><div>  return Object.assign({}, ...keys.map(key => ({[key]: o[key]})));</div><div>}</div><div><br></div><div>const o = {a:1, b: 2};</div><div>const o2 = pick(o, ['a']);</div><div>```</div><div><br></div><div>cannot handle renaming or defaults or deep picking, but in addition <u>it cannot also not be typed properly</u>.</div><div>For instance, `lodash.d.ts` defines `pick` as:</div><div><br></div><div>```</div><div><div>pick<TResult extends {}, T extends {}>(</div><div>  object: T,</div><div>  ...predicate: (StringRepresentable|StringRepresentable[])[]</div><div>): TResult;</div></div><div>```</div><div><br></div><div>with no type safety whatsoever.</div><div><br></div><div>In contrast, with pick notation</div><div><br></div><div>```</div><div>const o2 = o.{a};</div><div>```</div><div><br></div><div>`o2` can be precisely typed by the compiler as an object containing the property `a`, or a type compatible or assignable to that type.</div><div><br></div><div>--</div><div>Bob</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div></div>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div>