2017-03-06 15 views
0

npmパッケージreact-sortable-treeの型定義が書かれています。私はそれをどのように消費すべきかを理解することができません。ここで私が試したことがあります。npmモジュールのカスタムタイプ定義はどのように消費しますか?

定義ファイルreact-sortable-tree/index.d.tsTypescript documentationに記載されている指示に従います)に名前を付けて、ファイル名をtsconfig.jsonに追加しました。 Typescriptコンパイラ(バージョン2.2.1)は、モジュールの定義を見つけることができませんでした。私はmodule resolution methodsClassicNodeの両方を試してみました。

ファイルの名前をreact-sortable-tree.d.tsと変更した後、コンパイラは解決方法Classicでファイルを認識しました。ただし、npmパッケージに含まれているタイプ定義ファイル(たとえば、redux)を含む他のモジュールがあり、コンパイラはこれらのパッケージの定義を見つけることができません。

解決方法Nodeを使用する場合、コンパイラは、定義したパッケージを除くすべてのパッケージの型定義を見つけます。 react-sortable-treeパッケージの場合、コンパイラはパッケージに付属の実際のJavascriptファイルへのパスを解決し、定義を無視します。その結果、型チェックは行われません。

コンパイラが自分の型定義を考慮するために、どのように定義したらいいですか?

+0

読んだ後[documentation](https://www.typescriptlang.org/docs/handbook/module-resolution.html)さらに、私は 'node_modules'という名前のディレクトリを作成し、そこに自分の定義を入れてコンパイラを再それに解決する。私は試して、それは動作します。 'npm'で管理されていない' node_modules'という名前のディレクトリを持つことはできますか? –

+0

あなた自身のnode_modulesフォルダを作成する必要はありません.nodは後でnode_modulesを使用する場合に備えてお勧めします。 – Flion

答えて

0

ここNPMモジュールjisonのための宣言ファイルのための私の設定です:

のTSconfig:

"include": [ 
    "./src/definitions/jison.d.ts", 
    "./src/index.ts" 
] 

./src/definitions/jison.d.ts:

declare module Jison 
{ 
    export class Parser { 
     constructor(grammar:any); 
     generate():string; 
     parse(program:string):any; 
    } 
} 
declare module "jison" 
{ 
    export = Jison; 
} 
+0

'tsconfig.json'に' resolutionMethod'を指定しましたか?もし指定されていなければ、解決法は 'Classic'であり、コンパイラは' redux'のような独自の定義を持つパッケージの定義を認識しません(これは私が見ている動作です)。 –

関連する問題