title: is "Types of parameters '__0' and 'value' are incompatible" a bug?
body: <p>This type-checks in <a href="http://www.typescriptlang.org/play/#src=%0D%0Afunction%20head(%5Ba%5D)%20%7B%0D%0A%20%20return%20a%3B%0D%0A%7D%0D%0A%0D%0Aconst%20x%3A%20number%5B%5D%20%3D%20%5B%5B1%5D%2C%20%5B2%5D%5D.map(head)%0D%0A" rel="nofollow noreferrer">TypeScript Playground</a>, but fails on v3.1.6:</p>
  
  <pre><code>function head([a]) {
    return a;
  }
  
  const x: number[] = [[1], [2]].map(head)
  </code></pre>
  
  <p>Error mesage:</p>
  
  <pre><code>server/src/mock-resolvers/mock-data.ts(549,36): error TS2345: Argument of type '([a]: [any]) =&gt; any' is not assignable to parameter of type '(value: number[], index: number, array: number[][]) =&gt; any'.
    Types of parameters '__0' and 'value' are incompatible.
      Type 'number[]' is not assignable to type '[any]'.
        Property '0' is missing in type 'number[]'.
  </code></pre>
  
  <p>Is this a bug? I don't understand the error message or see what's wrong with the code.</p>
  
  <p>Being more specific with the types doesn't help, I get a similar error if the function is defined like this:</p>
  
  <pre><code>function head([a, _b]: [number, number]): number {
    return a;
  }
  </code></pre>