title: Typescript 3.7 Partial and is not assignable to type never/undefined
body: <p>After upgrading typescript version to 3.7 I get type errors in 2 functions. The functions work correctly (when adding @ts-ignore everything is fine).</p>
  
  <pre><code>interface A {
      x: string,
      y: number,
  }
  
  interface B {
      x: string,
      y: number,
      z: boolean,
  }
  
  function extract(input: B, keys: Array&lt;keyof A&gt;): Partial&lt;A&gt; {
      const extract: Partial&lt;A&gt; = {};
      keys.forEach((key: keyof A) =&gt; {
          extract[key] = input[key]; // error!
      //  ~~~~~~~~~~~~ &lt;-- 'string | number' is not assignable to 'undefined'    
      });
      return extract;
  }
  
  function assign(target: B, source: Partial&lt;A&gt;): void {
      (Object.keys(source) as Array&lt;keyof A&gt;).forEach((key) =&gt; {
          target[key] = source[key]!; // error!
      //  ~~~~~~~~~~~ &lt;-- 'string | number' is not assignable to type 'never'
      });
  }
  
  const test: B = { x: "x", y: 1, z: true };
  console.log(extract(test, ["y"])); // -&gt; { y: 1 }
  assign(test, { x: "new" });
  console.log(test); // -&gt; { x: "new", y: 1, z: true }
  </code></pre>
  
  <p>The code along with errors can be found at <a href="http://www.typescriptlang.org/play/?ssl=1&amp;ssc=1&amp;pln=29&amp;pc=53#code/JYOwLgpgTgZghgYwgAgILIN4Chm+QDwC5kBnMKUAcwBoc8BPYkAVwFsAjaWgXyy1EixEKAEKY6uIqXJVaeZI2QsOXCcgBexdgHttAGwhwQPPjGYgEYYNpDII+cojAAKUAAdmYYiOrIA1hD0JMSoUFBw9AA8AfTaMGgAfACUxAAKcFBWcHqRqAni8gg2ZHYO4ZZpGVk5ecgAvJjcANxqMSQAdDDaUACiiAAWzs4xxDFxaEn1+djy8vaOlgDaMQC69cjunsuBKy3y3El7eFAQYMxQtvPlYC28WGYWVjbIcCQkwJQgzmAZlKfevhI2nOSEqmWA2VyyWIADdtMAACYFPDOADy7AAVhBLO02s4gSCIJNXmgwhFooFxnkkp1un0EINhoFJnVpmp5D8oH8wNt6GsGgSoEheSsAIRHXAHW58IogEqQMjedYYAjEABE+DVvkUAEZfJpkORmChmlhZUCDO09NpKM4rk5vhAyL5Fmr6GqVklDsgAPQ+5AAWmmCmIOuQvFe70+judmFVyDVIAgAHc1eHDmbivoIFabTGwN6-YHg1JEymtSHkHqNMQjSagA" rel="nofollow noreferrer">ts playground</a></p>
  
  <p>Is there any way to implement this the right way without @ts-ignore?</p>