返回函数时,Flow-type不保留泛型函数参数

时间:2016-10-05 13:35:26

标签: javascript flowtype

在我的代码中,我想返回一个高阶函数并将我的参数类型传递给返回函数。最小缩减代码如下所示。

function curry<A, B: A>(a: A): (b: B) => void {
  return () => {}
}

curry(123)("123") // expected error but not

我想知道为什么B不会流向返回的函数。似乎返回的函数具有类型(b: any) => void

我知道在这个例子中我可以改变绑定到(a: A) => (b: A) => void之类的签名的类型。但我的真实情况更复杂,需要一个幻像类型作为界限,看起来像上面的B

所以问题是,B实例化的是什么类型?我可以将类型参数流转换为返回函数的参数位置吗?参数位置中的类型是否会影响实际参数的类型推断?

1 个答案:

答案 0 :(得分:4)

返回的函数的类型为(b: string) => void,您可以看到运行type-at-pos命令

// @flow

function curry<A, B: A>(a: A): (b: B) => void {
  return () => {}
}

const f = curry(123)
f("123")

运行flow type-at-pos index.js 7 7你得到:

(b: string) => void

请注意,由于类型推断的工作原理,类型A(以及B)会相应地更改为以下调用

const f = curry(123) // <= f now has type (b: string | boolean) => void
f("123")
f(true)