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

时间:2017-10-12 14:11:12

标签: flowtype

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

type PromiseAction = {
  +type: string,
  promise: ?Promise<any>,
};

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

(action: PromiseAction) =>

稍后我会检查收到的action对象是否包含promise属性,而action.promise是否有then

if (action.promise && typeof action.promise.then === 'function') {

如果确实如此,那么我会挂钩承诺链:

return promise.then(

此时我收到错误:“调用方法U的类型参数then。缺少注释”

我可以在source for flow中看到then的{​​{1}}属性有一个Promise参数,我认为该参数是被要求的参数。

如果我在类型声明中只有一个参数U,如何提供U注释?

1 个答案:

答案 0 :(得分:6)

您无需定义U

的值

您链接到的流源基本上意味着“then返回的Promise履行的值与处理程序的返回值相同,或者这些处理程序返回的Promise的已实现值“。这听起来很混乱(因为Promises可能会让人很困惑),但最重要的是,这不是你“填写”的东西。它会在then返回的类型与传递给onFulfill的{​​{1}}和onReject的返回值类型之间创建关系。

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

then

这将修复错误,或者至少消除return promise.then((a:string)=>...)的歧义,以便为您提供更具体的错误。