title: Why don't discriminated unions in typescript work in this way?
body: <p>Why can't typescript discriminate based on a common property like this?
  After reading <a href="https://www.typescriptlang.org/docs/handbook/advanced-types.html" rel="nofollow noreferrer">the docs</a> I thought this would work.</p>
  
  <p>Heres a <a href="https://www.typescriptlang.org/play/index.html#src=type%20Mammal%20%3D%20%7B%20legs%3A%20number%20%7D%0D%0Atype%20Fish%20%3D%20%7B%20fins%3A%20number%20%7D%0D%0A%0D%0Atype%20Action1%20%3D%20%7B%0D%0A%20%20%20%20type%3A%20&#39;a&#39;%2C%0D%0A%20%20%20%20payload%3A%20Mammal%20%0D%0A%7D%0D%0A%0D%0A%0D%0Atype%20Action2%20%3D%20%7B%0D%0A%20%20%20%20type%3A%20&#39;b&#39;%2C%0D%0A%20%20%20%20payload%3A%20Fish%0D%0A%7D%0D%0A%0D%0Atype%20ActionUnion%20%3D%20Action1%20%7C%20Action2%0D%0A%0D%0Aconst%20A%3A%20Action1%20%3D%20%7B%20type%3A%20&#39;a&#39;%2C%20payload%3A%20%7B%20legs%3A%204%20%7D%20%7D%0D%0Aconst%20B%3A%20Action2%20%3D%20%7B%20type%3A%20&#39;b&#39;%2C%20payload%3A%20%7B%20fins%3A%203%20%7D%20%7D%0D%0A%0D%0Afunction%20foo(action%3A%20ActionUnion)%20%7B%0D%0A%20%20%20%20switch%20(action.type)%20%7B%0D%0A%20%20%20%20%20%20%20%20case%20&#39;a&#39;%3A%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20%7B%20legs%20%7D%20%3D%20action.payload%0D%0A%0D%0A%20%20%20%20%20%20%20%20case%20&#39;b&#39;%3A%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20%7B%20fins%20%7D%20%3D%20action.payload%0D%0A%0D%0A%20%20%20%20%20%20%20%20default%3A%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20break%0D%0A%20%20%20%20%7D%20%0D%0A%7D%0D%0A" rel="nofollow noreferrer">typescript playground</a></p>
  
  <pre><code>type Mammal = { legs: number }
  type Fish = { fins: number }
  
  type Action1 = {
      type: 'a',
      payload: Mammal 
  }
  
  
  type Action2 = {
      type: 'b',
      payload: Fish
  }
  
  type ActionUnion = Action1 | Action2
  
  const A: Action1 = { type: 'a', payload: { legs: 4 } }
  const B: Action2 = { type: 'b', payload: { fins: 3 } }
  
  function foo(action: ActionUnion) {
      switch (action.type) {
          case 'a':
              const { legs } = action.payload
  
          case 'b':
              const { fins } = action.payload
  
          default:
              break
      } 
  }
  </code></pre>