如何显式地将类型参数传递给流程中的泛型函数?
How to explicitly pass type arguments to generic functions in flow?
我试图在调用泛型函数时明确指定类型。
例如:
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
泛型可用于指定参数之间或参数与结果之间的关系。您不能在 "call time" 处使用它,只能在声明时使用它。
它让你写出更不会出错的代码——拥有 2 个函数比一个通用函数更好(从理解和输入的角度):
function eatNumbers(v: number): string {return "" + v;}
function eatSomething<T>(v: T): T {return v;}
从 v0.72 开始可用。 CHANGELOG. Example
// @flow
declare function makeFoo<T>(): T;
const t = makeFoo<number>();
(t: number);
// $ExpectError
(t: string);
我试图在调用泛型函数时明确指定类型。
例如:
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
泛型可用于指定参数之间或参数与结果之间的关系。您不能在 "call time" 处使用它,只能在声明时使用它。
它让你写出更不会出错的代码——拥有 2 个函数比一个通用函数更好(从理解和输入的角度):
function eatNumbers(v: number): string {return "" + v;}
function eatSomething<T>(v: T): T {return v;}
从 v0.72 开始可用。 CHANGELOG. Example
// @flow
declare function makeFoo<T>(): T;
const t = makeFoo<number>();
(t: number);
// $ExpectError
(t: string);