类型参数`U`调用方法`then`.缺少注释

Dev*_*yam 11 flowtype

我有一个对象,可能包含声明的promise属性:

type PromiseAction = {
  +type: string,
  promise: ?Promise<any>,
};
Run Code Online (Sandbox Code Playgroud)

action函数的参数声明为PromiseAction类型:

(action: PromiseAction) =>
Run Code Online (Sandbox Code Playgroud)

稍后我检查收到的action对象是否有promise属性,如果action.promisethen:

if (action.promise && typeof action.promise.then === 'function') {
Run Code Online (Sandbox Code Playgroud)

如果确实如此,那么我会挂钩到promise链上:

return promise.then(
Run Code Online (Sandbox Code Playgroud)

此时我得到错误:" U方法调用的类型参数then.缺少注释"

我可以在源代码中看到thena 的属性Promise有一个U参数,我认为该参数是被要求的参数.

U如果我Promise<+R>在类型声明中只有一个参数,那么如何提供该注释呢?

Eug*_*neZ 6

您不需要定义值U.

您链接到的流源基本上是指" then履行返回的Promise,其值与处理程序的返回值相同,或者返回的Promise的履行值." 这听起来很混乱(因为Promises可能会让人很困惑),但最重要的是,这不是你"填写"的东西.它创建的类型之间的关系then返回和类型的返回值onFulfill,并onReject传递给then.

您获得的错误意味着Flow无法弄清楚该关系是什么,因为它没有足够的信息.then使用类型注释回调:

return promise.then((a:string)=>...)

这将修复错误,或者至少消除歧义U,以便为您提供更具体的错误.