2017-02-19 5 views
1

多型の機能をチェックするとき、私は私が間違っているの何見当がつかないが、多型の機能で動作するようにしようとしたとき、私はsome incompatible instantiation ofの同じ壁にぶつかる保ちます。私が間違って何をしているのか?`いくつかの互換性のないインスタンス化of`

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` 

EDIT:同じ問題でexample 簡単:

type EqualsBy = <Obj, Value>(Obj => Value, Value, Obj) => boolean 
export const equalsBy: EqualsBy = (f, value, obj) => value === f(obj) 

答えて

1

私は頻繁にこのようなエラーで困惑していますことを認めますよ。通常、それらに対処するための私の戦略は以下のとおりです。

  1. は、エラーが消えたり、私が取得するまで無償型注釈を追加するためのコードでは本当に難しい凝視し、それは可能性が台無しに 方法を考えてみてください、と
  2. しますより理解しやすいエラーメッセージ。

私は成功せず、このスニペットへのアプローチ(1)を適用します。私はすべてが矢印関数に型注釈を追加したことを

type EqualsBy = <Obj, Value>(Obj => Value, Value, Obj) => boolean; 
const equalsBy: EqualsBy = <Obj, Value>(f: Obj => Value, value: Value, obj: Obj) => (value === f(obj)) 

注:ただし、(2)の方法は、フローが通過する、これが得られました。正直なところ、フロートラブル、これをチェックしていた理由を私は知らないが、私はそれを何とか広すぎたいくつかのタイプを推測することを期待しています。

関連する問題