title: Flow union types and optional properties
body: <p>I just ran into an issue that is baffling me with <code>flow</code>. Can someone please explain to me why the following does not work, and how I would go about fixing it?</p>
  
  <pre><code>// @flow
  
  type MessageDescriptor = {
    id: string,
    defaultMessage?: string,
    description?: string
  };
  
  type MenuLabel = MessageDescriptor &amp; {
    +values?: { +[name: string]: string }
  };
  
  const msg: MessageDescriptor = {
    id: 'test'
  };
  
  const label: MenuLabel = msg;
  </code></pre>
  
  <p>The error I get is:</p>
  
  <pre><code>9: type MenuLabel = MessageDescriptor &amp; {                                        
                                          ^ property `values`. Property not found in
  
  17: const label: MenuLabel = msg;
                               ^ object type
  </code></pre>
  
  <p>However, <code>values</code> is obviously optional. Even more bizarrely, the following works:</p>
  
  <pre><code>const label: MenuLabel = { ...msg };
  </code></pre>