Type the function `PromiseAll` that accepts an array of PromiseLike objects, the returning value should be `Promise` where `T` is the resolved result array.
```ts
const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'foo');
});
// expected to be `Promise<[number, 42, string]>`
const p = PromiseAll([promise1, promise2, promise3] as const)
```