gpt4 book ai didi

javascript - 检查多态函数时`some incompatible instantiation of`

转载 作者:太空宇宙 更新时间:2023-11-04 16:00:16 25 4
gpt4 key购买 nike

我不知道我做错了什么,但是当尝试使用多态函数时,我总是遇到一些不兼容的实例化的同一堵墙。知道我做错了什么吗?

Example .

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)

最佳答案

我承认我经常被这样的错误所困扰。通常我解决这些问题的策略是:

  1. 认真地盯着代码并尝试想办法它可能会搞砸,并且
  2. 添加无偿的类型注释,直到错误消失或者我收到更容易理解的错误消息。

我将方法 (1) 应用于此代码片段,但没有成功。然而,方法(2)产生了这个,Flow 通过了:

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 在检查这一点时遇到困难,但我希望它推断出某种过于宽泛的类型。

关于javascript - 检查多态函数时`some incompatible instantiation of`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42332102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com