我有以下代码,其中我有两个函数,它们返回两种不同类型的对象(InterfaceA和InterfaceB)
现在,当我在它们上调用Promise.all时,我无法定义promises变量的类型,因此我必须使用其中的任何一个。
interface InterfaceA {
value: string;
}
interface InterfaceB {
value: number;
}
const returnA = (): Promise<InterfaceA> => {
const obj: InterfaceA = {
value: 'a'
};
return Promise.resolve(obj);
};
const returnB = (): Promise<InterfaceB> => {
const obj: InterfaceB = {
value: 1
};
return Promise.resolve(obj);
};
const promises: any = [returnA(), returnB()];
const res = await Promise.all(promises);
console.log(res)
const objA: InterfaceA = res[0];
问题是,一旦我收到Promise.all的响应,并尝试定义响应的类型,就会收到以下错误:
Type '{}' is not assignable to type 'InterfaceA'.
Property 'value' is missing in type '{}'. (2322)
Type '{}' is not assignable to type 'InterfaceA'. (2322)
我不确定如何处理该问题以及如何保留Promise.all响应中得到的对象类型?
谢谢!
答案 0 :(得分:2)
问题在于promises
的类型不能精确地推断为(Promise<InterfaceA> | Promise<InterfaceB>)[]
。
可以使用元组类型正确键入
const promises: [Promise<InterfaceA>, Promise<InterfaceB>] = [returnA(), returnB()];
const res = await Promise.all(promises);
可以通过消除promises
临时变量来避免此问题:
const res = await Promise.all([returnA(), returnB()]);
答案 1 :(得分:0)
我没有完全理解您的意图,我了解的是您想通过as
运算符来实现类似目的。
const returnA = (): Promise<InterfaceA> => {
const obj: InterfaceA = {
value: 'a'
};
return Promise.resolve(obj as InterfaceA);
};