【问题标题】:type parameter `U` of call of method `then`. Missing annotation方法`then`调用的类型参数`U`。缺少注释
【发布时间】:2018-03-24 12:32:00
【问题描述】:

我有一个可能包含这样声明的 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') {

如果是这样,那么我会连接到 Promise 链:

return promise.then(

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

我可以在source for flow 中看到Promisethen 属性有一个U 参数,我假设它是被要求的参数。

如果我在类型声明中只有一个参数Promise&lt;+R&gt;,如何提供U 注释?

【问题讨论】:

  • 您是否尝试过return (action.promise.then(...): Promise&lt;any&gt;)(或酌情替换any)?

标签: flowtype


【解决方案1】:

您不需要定义U 的值。

您链接到的流源本质上意味着“then 返回的 Promise 的值与处理程序的返回值或这些处理程序返回的 Promise 的已实现值相同。”这听起来令人困惑(因为 Promises 可能非常令人困惑),但最重要的是它不是你“填写”的东西。它在then 返回的类型与传递给thenonFulfillonReject 的返回值类型之间建立关系。

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

return promise.then((a:string)=&gt;...)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-06
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 2019-07-05
    • 1970-01-01
    相关资源
    最近更新 更多