正如我们所知,Promise.all将以与所请求的iterable相同的顺序返回已解决的promise。
我试图了解如何把正确的类型为个人解决解决。我使用Axios执行异步调用。
Promise.all([
<void, A>call an API a with response type A,
<void, B>call another API b with response type B,
<void, C>call another API c with response type C
]).then(([
Response aa of type A: ?,
Response bb of type B: ?,
Response cc of type C: ?
]) => {
});
字符串
的所有响应都是AxiosResponse<A | B | C>
类型。但是如果我显式地设置它,当阅读一个响应类型中的属性时,我将面临问题。例如:编译器将抱怨bb.test
,如果属性test
不存在于aa
或cc
中。
下面这句话是否可以明确地告诉你个人的React是哪种类型?
]).then(([
Response aa of type A: AxiosResponse<A>,
Response bb of type B: AxiosResponse<B>,
Response cc of type C: AxiosResponse<C>
]) => {
型
注意:编译器会隐式地处理类型。
1条答案
按热度按时间c0vxltue1#
如果你像你的问题中那样将数组指定为文字,它应该可以工作。正如Bergi在注解中所写的,
Promise.all
被声明为接受元组类型。字符串
然而,TypeScript会假设如果你声明一个数组,它会试图找到一个与数组中所有元素兼容的“最佳通用类型”。这会干扰你将数组解构为特定类型的能力。
型
要保留类型但仍然使用数组,您必须使用constAssert
as const
来指示TypeScript将其视为元组,就像它在第一个示例中所做的那样。型
请参阅TypeScript playground以获取上面的示例。