我在一个 Promise.all() 语句中发出 2 个 API 请求,后跟一个 .then() 语句来操作数据以适应预期的结果类型。当我使用 async/await 单独启动 API 请求但使用 Promise.all 时,该函数会起作用,导致返回的数组为 void 类型。如何更改响应以推断正确的类型?
这将返回正确的类型
async function getUsers() {
const users = await axios.get<User[]>("serverURL/users");
const data = await axios.get<
Array<{ name: string; data: number }>
>("serverURL/data");
const userData = users.data.map(user => {
return {
//logic to manipulate userData
};
});
return userData;
}
Promise.all 版本返回类型 'void | 键入分配给.then()',它会获取正确的数据,我可以 console.log 结果以确认它遵循预期的结构。然而编译器拒绝它并出现错误:
Type 'void | UserData[]' is not assignable to type 'UserData[]'.
const getUsers = async () => {
return Promise
.all([
axios.get<User[]>("serverURL/users"),
axios.get<Array<{ name: string; data: number }>>("serverURL/data")
])
.then <UserData[]>(res => {
const userData = res[0].map(user => {
return {
//logic to manipulate userData
};
});
return userData;
})
.catch(console.error)
}
我尝试过使用promise.all<any>()我读过的各种其他技巧,但有关 Promise.all 和 Typescript 的文档非常稀疏。如果有人能指出我正确的方向或告诉我我做错了什么,我将不胜感激。
汪汪一只猫
相关分类