如何在flow中将类型参数显式传递给泛型函数?

时间:2018-04-20 20:22:55

标签: generics flowtype

我正在尝试在调用泛型函数时显式指定类型。

例如:

export function gen<T>(a: string): { eat: T => string } {
  return {
    eat: (v: T): string => a
  };
}

当然,使用类似C ++的语法不起作用,因为flow扩展了Javascript语法,这已经是一个有效的JS表达式(比较):

const { eat } = gen<number>("str")

正确的语法是什么?

我想显式传递一个类型,否则这种代码不会产生错误:

const { eat } = gen("str")
const a = eat(5)
// I want this to be an error, but it is not
const b = eat("foo")

我当然可以注释赋值,导致推断出所需的泛型类型,但这可能很麻烦。 Try it here

2 个答案:

答案 0 :(得分:2)

自v0.72起可以使用。 CHANGELOGExample

// @flow

declare function makeFoo<T>(): T;

const t = makeFoo<number>();

(t: number);

// $ExpectError
(t: string);

答案 1 :(得分:1)

泛型可用于指定参数或参数与结果之间的关系。你不能在#34;呼叫时间&#34;上使用它,只能在申报时使用 它让你编写更明确无误的代码 - 拥有2个函数而不是通用代码(从理解和输入的角度来看)更好:

function eatNumbers(v: number): string {return "" + v;}
function eatSomething<T>(v: T): T {return v;}