我不知道我做错了什么,但是当我尝试使用多态函数时,我一直在使用some incompatible instantiation of
的同一个墙。知道我做错了吗?
type EqualsBy = <Obj, Value>(Obj => Value, Value) => (Obj => boolean)
export const equalsBy: EqualsBy = (f, value) => (obj => f(obj) === value)
2: export const equalsBy: EqualsBy = (f, value) => (obj => f(obj) === value)
^ Obj. This type is incompatible with the expected param type of
2: export const equalsBy: EqualsBy = (f, value) => (obj => f(obj) === value)
^ some incompatible instantiation of `Obj`
编辑: 容易example出现同样问题:
type EqualsBy = <Obj, Value>(Obj => Value, Value, Obj) => boolean
export const equalsBy: EqualsBy = (f, value, obj) => value === f(obj)
答案 0 :(得分:1)
我承认我经常被这样的错误所困扰。通常我解决它们的策略是:
我将方法(1)应用于此代码段但没有成功。然而,方法(2)产生了这个,流程通过:
type EqualsBy = <Obj, Value>(Obj => Value, Value, Obj) => boolean;
const equalsBy: EqualsBy = <Obj, Value>(f: Obj => Value, value: Value, obj: Obj) => (value === f(obj))
请注意,我所做的只是向箭头函数添加类型注释。老实说,我不知道为什么Flow无法检查这个,但我希望它推断出某种类型太过宽泛。