gpt4 book ai didi

javascript - 调用 Promise.all 时如何保留 Typescript 返回类型?

转载 作者:行者123 更新时间:2023-11-30 11:12:42 24 4
gpt4 key购买 nike

我有以下代码,其中有两个函数返回两种不同类型的对象(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 的响应中获得的对象的类型?

谢谢!

最佳答案

问题是 promises type 没有被精确地推断为 (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()]);

关于javascript - 调用 Promise.all 时如何保留 Typescript 返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53009980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com