Promise.all的类型定义不匹配与文档(Type definition of Promise.

2019-11-05 11:04发布

综观的类型定义Promise.all ,我看到10下的定义:

/**
 * Creates a Promise that is resolved with an array of results when all of the provided Promises
 * resolve, or rejected when any Promise is rejected.
 * @param values An array of Promises.
 * @returns A new Promise.
 */
all<T1, T2, T3>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>]): Promise<[T1, T2, T3]>;

我只包括一个长度为3的阵列,但也存在着all<T1> all<T1, T2>高达一路all<T1, T2, ..., T9, T10>

然而,这种不匹配的实施Promise.all ,这可能需要作为输入的阵列比10长:

 let myPromise = num => Promise.resolve(num); let myPromisesArray = (new Array(20)) .fill() .map((_,i) => myPromise(i)); Promise.all(myPromisesArray).then(console.log) 

我不是世界上最糟糕的开发者,但仍然,我作一个假设,谁生产的ES2015的类型定义的微软开发者更了解JS / TS比我,这引出了一个问题:

为什么Promise.all的类型定义不匹配也不它的文档也不是它的实现?

Answer 1:

通用声明多达10种类型的仅占非均匀“元组”,或阵列,其中不同的指标有明确的独立的类型。

还有,支持均匀类型数组宣言无限长度的:

all<T>(values: (T | PromiseLike<T>)[]): Promise<T[]>;

使用高达长度为10的元组的声明应该支付的使用情况的合理量,并且是由于打字原稿的限制作为一种语言,因为对于一个元组通用类型推断是无所不包的均匀阵列联合类型 ,这将使用上面的签名。 这些类型的通用声明高达结合的非均质类型的任意的是常见的,发生在其他汉语语言如C#为好。 例如, Action<>Func<>使用16种参数类型的限制。



文章来源: Type definition of Promise.all doesn't match with the docs