2016-10-22 2 views
1

私はimmutable.jsを私のプロジェクトに依存関係として追加しました。私はimmutable.jsからのIterableのフロータイプ定義は、他のlibsのIterablesを破ります

node_modules/immutable/dist/immutable.js.flow 

を私の.flowconfigに追加しました。

問題は不変はまた、fbjsreact-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にリネームし、エラーはなくなりました。

不変の定義を手作業で編集することなくこの問題を修正する最良の方法は何ですか?

+0

「タイプIterable <+T> = $ Iterable ;」を追加すると、問題が解決しました。フローコアの定義をコピーしました。しかし、正しい方法がわからない – xvaldetaro

+0

宣言ファイルをライブラリ定義として使用すると、誤ってモジュールとしてローカルにすべきグローバルなものが誤って宣言される可能性があるためです。 'immutable.js.flow'は' immutable'モジュールの中で 'Iterable'を宣言しようとしますが、libdefとして使用すると' Iterable'がグローバルに宣言され、組み込みの 'Iterable'定義は無効になります。 –

答えて

1

主な問題点は、node_modules/immutable/dist/immutable.js.flowはライブラリ定義ではないため、エラーを起こす可能性があることです。

immutable.js.flow

docs宣言ファイルとして、これらのファイルを参照してくださいどのようなものです。 immutable.js.flowimmutable.jsという名前のファイルの隣にあります。フローにimmutable.jsが必要な場合はいつでも、immutable.js.flowに解決されます。

$ flow find-module immutable foo.js 
/Users/glevi/test/immutable/node_modules/immutable/dist/immutable.js.flow 

宣言ファイルがlibdefsよりも少し異なるが書かれている:あなたはフローfoo.js輸入immutableときに解決されたファイルを示しflow find-moduleコマンドでこれをテストすることができます。ライブラリ定義は、グローバルなものの束を宣言します。彼らはどの変数、関数、型、クラス、モジュールなどがグローバルに利用可能であるかを宣言し、これらの型を宣言します。宣言ファイルは、シャドーイングしているモジュールの型だけを宣言します。 immutablejsため

LIBDEFは

declare module 'immutable' { 
    declare class Iterable<K,V> { ... } 
    ... 
} 

のようになります。あなたは理論的には

を何をすべき

declare export class Iterable<K,V> { ... } 

ようimmutable.js.flowが見えるかもしれないが、あなたはあなたにnode_modules/immutable/dist/immutable.js.flowを追加する必要はありません.flowconfig。コードがimmutableをインポートするたびに、フローは自動的にそれを使用します。

immutable.js.flowに不具合があると問題がある場合は、immutable.js.flowに対してプルリクエストまたは発行を開くか、libdefをflow-typedに送信することをおすすめします。

クイック検索で誰かworking on a immutable libdefが表示されますので、お手伝いもできます!

関連する問題