私はimmutable.jsを私のプロジェクトに依存関係として追加しました。私はimmutable.jsからのIterableのフロータイプ定義は、他のlibsのIterablesを破ります
node_modules/immutable/dist/immutable.js.flow
を私の.flowconfig
に追加しました。
問題は不変はまた、fbjs
とreact-native
としてnode_modules/
にある他の多くのライブラリで使用されるグローバル型でIterable
タイプをエクスポートすることです。たとえば以下のエラーの1つです。この問題を解決するために
node_modules/fbjs/lib/countDistinct.js.flow:22
22: function countDistinct<T1, T2>(iter: Iterable<T1>, selector: (item: T1) => T2): number {
^^^^^^^^^^^^ type application of identifier `Iterable`. Too few type arguments. Expected at least 2
32: declare class Iterable<K, V> extends _ImmutableIterable<K, V, typeof KeyedIterable, typeof IndexedIterable, typeof SetIterable> {}
^^^^ See type parameters of definition here. See lib: flow/immutable.js:32
私は自分のプロジェクトにimmutable.js.flow
をコピーして、それを含んで.flowconfig
行を削除しました。私のコピーしたファイルでは、IterableをWhateverIterableにリネームし、エラーはなくなりました。
不変の定義を手作業で編集することなくこの問題を修正する最良の方法は何ですか?
「タイプIterable <+T> = $ Iterable;」を追加すると、問題が解決しました。フローコアの定義をコピーしました。しかし、正しい方法がわからない –
xvaldetaro
宣言ファイルをライブラリ定義として使用すると、誤ってモジュールとしてローカルにすべきグローバルなものが誤って宣言される可能性があるためです。 'immutable.js.flow'は' immutable'モジュールの中で 'Iterable'を宣言しようとしますが、libdefとして使用すると' Iterable'がグローバルに宣言され、組み込みの 'Iterable'定義は無効になります。 –