title: How to type Axios.all when the each promise has a different return type
body: <p>I have two Axios <code>get</code> requests, for which the return types have been explicitly declared. Here's a simplified example:</p>
  
  <pre><code>interface O1 {
     prop1: string;
     prop2: boolean;
  }
  
  interface O2 {
     prop3: number;
     prop4: string;
  }
  
  interface Request&lt;T&gt; {
     message: string;
     data: T
  }
  </code></pre>
  
  <p>Using these interfaces, I've typed my requests and the result object is also typed:</p>
  
  <pre><code>const getO1 = () =&gt; Axios.get&lt;Request&lt;O1&gt;&gt;("/API/O1");
  const getO2 = () =&gt; Axios.get&lt;Request&lt;O2&gt;&gt;("/API/O2");
  </code></pre>
  
  <p>Now I need to make this calls in parallel, so I've tried <code>Axiox.all</code> but TypeScript complains the the <code>O1</code> and <code>O2</code> types do not match. Specifically, I've tried:</p>
  
  <pre><code>const getAll = () =&gt; Axios.all([getO1(), getO2()]);
  </code></pre>
  
  <p>From what I can see, TypeScript expects that, in the case of <code>all</code>, all results will have the same type (structure). Is there a way of having a typed concurrent call? (using Axios v0.18 and TypeScript v3.0.3)</p>