title: Why doesn't throw an error this union based type?
body: <p>I have in my TypeScript project a situation which could be simplified with the following:</p>
  <p>Consider the following type <code>Type</code>:</p>
  <pre class="lang-typescript prettyprint-override"><code>type Type = {
    a: number;
  } | {
    a: number;
    b: number;
  } | {
    a: number;
    b: number;
    c: number;
  };
  </code></pre>
  <p>I can define the <code>t</code> constant based on <code>Type</code> type:</p>
  <pre class="lang-typescript prettyprint-override"><code>const t: Type = {
    a: 1,
    c: 3
  };
  </code></pre>
  <p>And <strong>it doesn't give me any error</strong>! Due the <code>Type</code> type definition, I couldn't define an object with <code>a</code> and <code>c</code> properties. But I can. Why?</p>
  <p>Moreover, if I access <code>c</code> property:</p>
  <pre class="lang-typescript prettyprint-override"><code>console.log(t.c);
  </code></pre>
  <p>It gives me a transpitation error saying:</p>
  <pre class="lang-text prettyprint-override"><code>Property 'c' does not exist on type 'Type'. Property 'c' does not exist on type '{ a: number; }'.
  </code></pre>
  <p>I really don't know what's going on!</p>