我如何注释我想要任何类型作为输入,但与 Flow 的输出类型相同?

How can I annotate I want any type as input but something of the same type as output with Flow?

假设我有一个非常简单的函数,它只接受任何类型的参数并将其包装在一个数组中。

function wrap (anything) {
  return [anything]
}

这在(我理解的)Hindley-Milner 注释中很容易描述,如下所示:

// wrap :: a -> [a]

我将如何使用 Flow 的类型注释来显示同样的事情,即我想要任何类型作为输入,以及相同类型的数组作为输出?

以下无效:

function wrap (anything: a): Array<a> {
  return [anything]
}

它抛出这个错误:

ERROR in src/wrap.js:1
 1: function wrap(x: a): Array<a> {
                     ^ identifier `a`. Could not resolve name

这是 polymorphic functions 的语法:

function wrap<a>(anything: a): Array<a> {
  return [anything]
}