首页 > 解决方案 > 从 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.
}

这让我应该如何“解开”一个有价值的承诺?

标签: javascripttypescriptasynchronouspromiseasync-await

解决方案


您在编译时无法真正知道它是什么,因为这是在运行时明确发生的事情。

所以通常 a 的结果JSON.parse()any。更严格的版本可能是unknown类型。

如果您只想假设您返回的任何内容都是正确的类型,而无需验证(因为您信任服务器),我想我会这样做:

async function getUserData(): Promise<UserInfo> {
   return fetch('url'); // fetch returns a promise, wrapping the user data returned
}


推荐阅读