复制:
// @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();
Try it on flow.org/try
上下文:
当调用一个名为“foo”的函数并返回一个带有await的promise时,变量的类型仍然是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]
尝试过的解决方案:
相关问题:
https://github.com/facebook/flow/issues/5294
这个问题的目的:
我主要是在寻找解决方法
最佳答案
这似乎是一个简单的误解,但是来自Flow的错误消息不是很有用。
您已将bar
声明为
const bar = async (): A => {
但是异步函数总是返回promise,所以应该
const bar = async (): Promise<A> => {
您可以看到它here on flow.org/try。
关于async-await - Flow确实在异步/等待之后将变量解释为Promises,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51214283/