title: No overload matches this call in TypeScript when concatenating arrays of different signatures
body: <p>I am getting this error:</p>
  <pre><code>No overload matches this call.
    Overload 1 of 2, '(...items: ConcatArray&lt;{ title: string; width: number; dataIndex: string; render: (level: string) =&gt; Element; }&gt;[]): { title: string; width: number; dataIndex: string; render: (level: string) =&gt; Element; }[]', gave the following error.
      Argument of type '{ title: Element; dataIndex: string; width: number; render: (myThing: MyType) =&gt; Element; }[]' is not assignable to parameter of type 'ConcatArray&lt;{ title: string; width: number; dataIndex: string; render: (level: string) =&gt; Element; }&gt;'.
        The types returned by 'slice(...)' are incompatible between these types.
          Type '{ title: Element; dataIndex: string; width: number; render: (myThing: MyType) =&gt; Element; }[]' is not assignable to type '{ title: string; width: number; dataIndex: string; render: (level: string) =&gt; Element; }[]'.
            Type '{ title: JSX.Element; dataIndex: string; width: number; render: (myThing: MyType) =&gt; JSX.Element; }' is not assignable to type '{ title: string; width: number; dataIndex: string; render: (level: string) =&gt; JSX.Element; }'.
              Types of property 'title' are incompatible.
                Type 'Element' is not assignable to type 'string'.
    Overload 2 of 2, '(...items: ({ title: string; width: number; dataIndex: string; render: (level: string) =&gt; Element; } | ConcatArray&lt;{ title: string; width: number; dataIndex: string; render: (level: string) =&gt; Element; }&gt;)[]): { ...; }[]', gave the following error.
      Argument of type '{ title: Element; dataIndex: string; width: number; render: (myThing: MyType) =&gt; Element; }[]' is not assignable to parameter of type '{ title: string; width: number; dataIndex: string; render: (level: string) =&gt; Element; } | ConcatArray&lt;{ title: string; width: number; dataIndex: string; render: (level: string) =&gt; Element; }&gt;'.
        Type '{ title: Element; dataIndex: string; width: number; render: (myThing: MyType) =&gt; Element; }[]' is not assignable to type 'ConcatArray&lt;{ title: string; width: number; dataIndex: string; render: (level: string) =&gt; Element; }&gt;'.
  </code></pre>
  <p>The error is because I am concatenating two arrays, with different signatures:</p>
  <pre><code>const columnA = {
    title: '',
    width: 100,
    dataIndex: 'level',
    render: (level: string) =&gt; {
      return &lt;b&gt;L{level}&lt;/b&gt;
    }
  }
  
  const remainingColumns = [
    {
      title: (
        &lt;div&gt;hello&lt;/div&gt;
      ),
      dataIndex: 'something',
      width: 240,
      render: (myThing: MyType) =&gt; {
        return &lt;div&gt;{myThing.title}&lt;/div&gt;
      }
    },
    {
      title: (
        &lt;div&gt;world&lt;/div&gt;
      ),
      dataIndex: 'else',
      width: 240,
      render: (myThing: MyType) =&gt; {
        return &lt;div&gt;{myThing.title}&lt;/div&gt;
      }
    }
  ]
  
  const columns = [columnA].concat(remainingColumns)
  </code></pre>
  <p>How do I resolve this, I have a dynamic number of <code>remainingColumns</code> all which have signature 1, and then the 1 <code>columnA</code> which has signature 2.</p>