在 Flow 中使用 Promise 作为 return 类型

Using Promise as return type in Flow

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

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,但不适用于本地。对这个问题有什么想法吗?

根据流程更新日志,v0.28.0 中引入了一项更改,使类型参数显式化。将 return 类型明确设置为 Promise<any> 应该可以解决您的问题。

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

experimental.strict_type_args=false

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

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

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

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

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

here as well for another example

的文档中