Javascript Flow通用函数语法
问题描述:
我在编写通用映射函数时遇到了一些语法错误。Javascript Flow通用函数语法
function mymap<A, B>(fun: (_: A) => B, array: Array<A>): Array<B> {
let result: Array<B> = [];
for (let i of array)
result.push(fun(i));
return result;
}
let x = mymap<number, number>(x => x, [1, 2, 3]);
^Unexpected token
Flow说:Unexpected token >
。我究竟做错了什么?感谢您的帮助。
答
Flow只是一个类型检查器。虽然它不允许泛型实现的类型重载,但在调用函数时不应指定类型。 Flow将仅尝试检查参数是否与函数的签名兼容,并扣除输出类型。所以,你只需要编写
let x = mymap(x => x, [1, 2, 3]);
和流量会扣除表达的输出类型,并将其应用到x
变量。
或者你可以显式指定类型的x
:
let x: Array<number> = mymap(x => x, [1, 2, 3]);
在这种情况下流量可以比较扣除的类型与所需要的类型,如果你错误地将使用不正确的映射功能类似x => x.toString()
,然后流会提醒你:
let x: Array<number> = mymap(x => x.toString(), [1, 2, 3]);
// ^string ^This type is incompatible with number
在哪个'''s? – Bergi
第二个'number'类型声明 – zyks