javascript - 从 Promise 或 async / await 返回的值的数据类型
问题描述
我知道有很多关于这个问题的相关问题/帖子,但他们并没有真正回答我的问题,我的问题很简单,如果我有一个承诺并且我将它包装在一个异步函数中并等待它直到它像这样解决:
async function getUserData() {
return fetch('url'); // fetch returns a promise, wrapping the user data returned
}
async main() {
const user = await getUserData();
// what is the type of the user object here?
}
我问这个问题是因为我使用的是 TypeScript,我通常尝试将返回值类型转换为预期的类型,如下所示:
async function getUserData() {
return fetch('url') as UserInfo;
}
说 UserInfo 有一个 name 属性,但如果我尝试以这种方式编写,那么 user.name 是未定义的:
async function main() {
const user = await getUserData();
console.log(user.name); // undefined.
}
这让我应该如何“解开”一个有价值的承诺?
解决方案
您在编译时无法真正知道它是什么,因为这是在运行时明确发生的事情。
所以通常 a 的结果JSON.parse()
是any
。更严格的版本可能是unknown
类型。
如果您只想假设您返回的任何内容都是正确的类型,而无需验证(因为您信任服务器),我想我会这样做:
async function getUserData(): Promise<UserInfo> {
return fetch('url'); // fetch returns a promise, wrapping the user data returned
}
推荐阅读
- php - Array_intersect 和返回值的顺序
- java - Spring安全认证服务器
- c - 为什么可以在 C 中的循环内定义变量?
- c - C - read() 返回负数
- database - 微服务架构概念问题——微服务数据和边界
- python - 将字典的值(具有两个索引:Periods,Products)乘以 Excel 文件中的列(具有一个索引:Products)的值
- python - 在 groupby 函数 pandas 中过滤
- c++ - 用于在 C++ 中对向量进行排序的递归代码
- google-analytics-4 - 在 GA4 中是否可以创建自定义用户/会话获取属性?
- javascript - 如何在子组件中获取后端数据,然后从存储中检索对象?