title: Why does Typescript infer 'never' instead of intersection type?
body: <p>Given the following example:</p>
  
  <pre class="lang-js prettyprint-override"><code>interface Data {
      name: string;
      value: number;
  }
  
  const data :Data = {
      name: 'name',
      value: 1,
  }
  
  const updateValue = (key: keyof Data, value: string | number): void =&gt; {
      data[key] = value;
  };
  
  </code></pre>
  
  <p><a href="https://www.typescriptlang.org/play/#code/JYOwLgpgTgZghgYwgAgCJzHZBvAUMg5EOAWwgC5kBnMKUAcwG59CA3OAGwFcKiuSARtGYBfXLgQB7EDWQATDFnLpMyALw4WBYmUoByHRD0AaLcnbdeARlNiJ02VwAOCyADVOPdcgAUAawgAT0oAwMkYNEVjc09eGjoQemQAHz5BaABKSlZJYDl1AD5NQnlFAG1QgF1vCx5RZiA" rel="noreferrer">link to ts-playgound</a></p>
  
  <p>Typescript shows the following error:</p>
  
  <pre><code>Type 'string | number' is not assignable to type 'string &amp; number'.
    Type 'string' is not assignable to type 'string &amp; number'.
      Type 'string' is not assignable to type 'number'.
  </code></pre>
  
  <p>Which is clear and understandable. However if I add a union type to the interface like so:</p>
  
  <pre class="lang-js prettyprint-override"><code>type MultiType = 'x' | 'y';
  
  interface Data {
      name: string;
      value: number;
      multiType: MultiType | null;
  }
  
  const data :Data = {
      name: 'name',
      value: 1,
      multiType: null,
  }
  
  const updateValue = (key: keyof Data, value: string | number): void =&gt; {
      data[key] = value;
  };
  </code></pre>
  
  <p><a href="https://www.typescriptlang.org/play/#code/C4TwDgpgBAsgrgG2ASwCrmgXigcgB45QA+uIOA3AFCXIB2wEATgGYCGAxtACKvCtQBvSlBFRarALYQAXFADOwRnQDmVUVABurBHBli4EgEZM1oiYhTpIs+EjQZi+hAioBfauwD2tBVAAmvPzSPHxQ2ELq4lKyOFEQOAA0wqJaOnoAjEnq5nZWerSICEnulF4+wFBwYAEMAGraumFQABQA1hAgsu0gnsxQIawJmg16Ckq0yo4FRkwAlLIansh+YQB8gskiNawA2t0Auk2pum5UQA" rel="noreferrer">link to ts-playgound</a></p>
  
  <p>I get the following error:</p>
  
  <pre><code>Type 'string | number' is not assignable to type 'never'.
    Type 'string' is not assignable to type 'never'.
  </code></pre>
  
  <p>Typescript accepts it if I use the intersection type <code>string &amp; number &amp; MultiType</code> but it also accepts <code>never</code>.</p>
  
  <p>This seems inconsistent to me. Is this maybe a bug?</p>