复制:
// @flow
type A = { key: string, value: string};
const a:A = {
key: 'a',
value: 'a'
};
const foo = ():Promise<A> => {
return new Promise(function(resolve, reject){
setTimeout(function(){
resolve(a);
}, 1000);
});
}
const bar = async ():A => {
const res:A = ((await foo()):any);
return res;
}
bar();
背景:
使用await调用返回Promise的函数'foo'时,变量的类型仍然为Promise。
如果我们只返回变量,Flow可以正确解释该值,但如果我们对名为'bar'的函数的返回进行类型标注,则会触发错误。
19: return res;
^ Cannot return `res` because property `key` is missing in `Promise` [1] but exists in `A` [2].
References:
[LIB] static/v0.75.0/flowlib/core.js:583: declare class Promise<+R> {
^ [1]
17: const bar = async ():A => {
^ [2]
尝试的解决方案:
- 强制将调用await的变量类型设置为'A'
- 使用任何类型转换,然后将其设置为'A'似乎无法解决错误。
https://github.com/facebook/flow/issues/5294
此问题的目的:我主要是在寻找解决方法。
async
函数总是返回一个 Promise。要从该 Promise 中获取值,请使用.then()
或await
。 - jfriend00