title: Union Type missing properties
body: <p>Say I have the following types:</p>
  
  <pre><code>type MessageType = 'example1' | 'example2' | 'example3'
  
  type MessageHead = {
    +type: MessageType
  }
  
  type BaseBody = {
    +payload?: any,
    +data?: any
  }
  
  type LabelledBody = {
    +labelName: string
  }
  
  type MessageBody = BaseBody | LabelledBody
  
  type Message = MessageHead &amp; MessageBody
  </code></pre>
  
  <p>And I then consume a message like so:</p>
  
  <pre><code>[{name: 'example1'}, {name: 'potato'}].find(thing =&gt; thing.name === message.labelName)
  </code></pre>
  
  <p>Resulting in the following flow exception:</p>
  
  <pre><code>Cannot get message.labelName because:
   • all branches are incompatible:
      • Either property labelName is missing in MessageHead [1].
      • Or property labelName is missing in BaseBody [2].
   • ... 1 more error.
  </code></pre>
  
  <p>With <code>type Message = MessageHead &amp; MessageBody</code> being displayed as the violated type</p>
  
  <p>What I don't understand is why my Union Type doesn't allow for a message with a labelname?</p>
  
  <p>Edit: Tryflow link:<a href="https://flow.org/try/#0C4TwDgpgBAshDO8CGBzCAVc0C8UDkEAHkgLZgA2EAjHlAD75GkUQBMtDBxZlAzHgCgBoSLATI0ACQhIAJlFwBvAVCgBqERABcYxKgxYBAXyGaoAISTwI5gPayQCqMtVqwSEOVtyA-DqQAdiAANCrqskjASH5QgSDGplhQADJIAEYQ5JSydg5OLurk6ZkAcqTaUPDAAE4AlgEoCcJJcHpouY64ltYd9CnFWRA59vHNoq0SOLqT0nJQAGTT+h1CAMa2AVVQRABiAK4Bq04AFCTi+joT+gCUCgB8zmEA2ooB5TpczJQ0RsHOb2cPmBbFFgLY8EYALoAOgAZvVZMdgAALeooe5QFFo6EAnDYXBnNoQaFFDLkMpna7GIA" rel="nofollow noreferrer">Tryflow link</a></p>