title: Type checking on Array.map that returns object literals
body: <p>I've created <a href="https://www.typescriptlang.org/play/#src=interface%20Test%7B%0D%0A%20%20%20%20a%3A%20string%0D%0A%20%20%20%20b%3A%20string%0D%0A%7D%0D%0A%0D%0Aconst%20object%3A%20Test%20%3D%20%7B%0D%0A%20%20%20%20a%3A%20&#39;b&#39;%2C%0D%0A%20%20%20%20b%3A%20&#39;c&#39;%2C%0D%0A%7D%0D%0A%0D%0Afunction%20testIt()%3A%20Test%5B%5D%20%7B%0D%0A%20%20%20%20const%20data%20%3D%20%5B%7Bb%3A%20&#39;2&#39;%2C%20c%3A%20&#39;3&#39;%7D%5D%0D%0A%20%20%20%20const%20prices%3A%20Test%5B%5D%20%3D%20data.length%20%3F%20data.map((item)%20%3D%3E%20%7B%0D%0A%20%20%20%20%20%20%20%20return%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20a%3A%20item.b%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20b%3A%20item.c%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20c%3A%20&#39;2&#39;%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20d%3A%20&#39;3&#39;%0D%0A%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%7D)%20%3A%20%5B%5D%3B%0D%0A%20%20%20%20return%20prices%3B%0D%0A%7D" rel="noreferrer">this example</a> in the TypeScript playground:</p>
  
  <pre><code>interface Test{
      a: string
      b: string
  }
  
  const object: Test = {
      a: 'b',
      b: 'c',
  }
  
  function testIt(): Test[] {
      const data = [{b: '2', c: '3'}]
      const prices: Test[] = data.length ? data.map((item) =&gt; {
          return {
              a: item.b,
              b: item.c,
              c: '2',
              d: '3'
          }
      }) : [];
      return prices;
  }
  </code></pre>
  
  <p>Removing either a or b property from the object return statement in the array map method results in a TypeScript error (as expected).</p>
  
  <p>Adding c or d or any other random unknown property does not trigger a TypeScript error. I would suspect that this is only possible if the interface contains [x: string]: any.</p>
  
  <p>So why does Array.map do type checking on missing properties on an interface but not on additional / unknown properties?</p>