Closed
Description
TypeScript Version: 4.2.0-dev.20201205
Search Terms: Promise.all, tuple, readonly
Code
// readonly [Promise<number>]
const promises = [Promise.resolve(0)] as const
Promise.all(promises).then((results) => {
const first = results[0]
const second = results[1]
})
Expected behavior:
const promises = [Promise.resolve(0)] as const
Promise.all(promises).then((results) => { // results is [number]
const first = results[0] // number
const second = results[1] // Tuple type '[number]' of length '1' has no element at index '1'
})
Actual behavior:
const promises = [Promise.resolve(0)] as const
Promise.all(promises).then((results) => { // results is number[]
const first = results[0] // number | undefined (if noUncheckedIndexedAccess is on)
const second = results[1] // no errors here
})
This is because of the last overload in lib.es2015.promise.d.ts
:
all<T>(values: readonly (T | PromiseLike<T>)[]): Promise<T[]>;
Tuples with more than 1 element have expected behavior.
Playground Link: Here
Related Issues: Couldn't find any