在 Flow 中使用 Promise 作为返回类型

Posted

技术标签:

【中文标题】在 Flow 中使用 Promise 作为返回类型【英文标题】:Using Promise as return type in Flow 【发布时间】:2016-12-08 09:51:42 【问题描述】:

我正在使用 Flow 0.30.0。我有一个返回承诺的函数:

function process(callback:Function):Promise 
  return new Promise((r,re) => callback)

Flow 报错,抱怨:

function process(callback:Function):Promise 
                                    ^^^^^^^ Promise. Application of polymorphic type needs <list of 1 argument>. (Can use `*` for inferrable ones)

这适用于Try Flow,但不适用于本地。对这个问题有任何想法吗?

【问题讨论】:

【参考方案1】:

根据流程变更日志,v0.28.0 中引入了一项变更,使类型参数显式化。将返回类型显式设置为 Promise&lt;any&gt; 应该可以解决您的问题。

或者,您可以将以下标志设置为 false,尽管这是一个临时标志,将来会被删除

experimental.strict_type_args=false

https://github.com/facebook/flow/blob/master/Changelog.md#v0280

【讨论】:

请原谅我的无知,但我一直试图在 Flow Docs (flow.org/en/docs/types) 中找到 Promise 类型的文档,但我找不到任何东西。它记录在哪里? @Leonardo 我也有同样的情况,你找到上面的文档了吗? @Noitidart 之类的,我不得不打开一个issue on github,他们将我指向实现 Promise 类型的代码。显然代码存在,但没有记录:\【参考方案2】:

我猜这是前段时间想出来的,正确答案是本地和在线流解释器之间的版本不匹配。

但是,由于在查找如何对 Promise 进行 Flow 注释时,这个问题出现在搜索结果的顶部附近,因此可能值得一提的是,针对这些类型的情况的解决方法是将 Promise 解析为的 Flow 类型指定为流量角括号参数。

在这种情况下,在 Promise 注释中添加“any”可以消除错误,例如...

function process(callback:Function):Promise<any> 
  return new Promise((r,re) => callback)

在here as well for another example 的文档中

【讨论】:

以上是关于在 Flow 中使用 Promise 作为返回类型的主要内容,如果未能解决你的问题,请参考以下文章

具有不同返回类型的 Promise.all [关闭]

Typescript 函数可以将 Promise<any> 作为 Promise<Bar> 返回吗?

javascript promise_flow.js

打字稿通用承诺返回类型

如何在承诺中返回修改后的结果作为承诺

vue控制台报 Uncaught (in promise) TypeError: