declare function MaybePromise<T>(value: T): T | Promise<T> | PromiseLike<T>; async function doSomething(): Promise<[number, number]> { const result = await Promise.all([ MaybePromise(100), MaybePromise(200) ]); // Error! // // [number | Promise<100>, number | Promise<200>] // // is not assignable to type // // [number, number] return result; }
Now
Promise.all leverages combines certain features with Awaited to give much better inference results, and the above example works
Seonglae Cho