2017-07-10 10 views
1

私はPDFKitに依存するWebアプリケーションを構築しています。 PDFKitはWebpackを使用してブラウザで実行できます。 WebpackでTypescriptを使用しているので、私は@types/nodeの定義を含めているので、PDFKitとのインターフェイスが適切に動作します。Webpack + Typescriptのノード依存ライブラリと型の競合を解決します

ブラウザのグローバル(Timerなど)またはWebpackランタイムのグローバル(例:require)を利用するアプリの他の部分が原因で、入力がNodeと同じではなくエラーが発生します。

Node Typingを必要な場所に隔離するためのアイデアはありますか?ただ醜いと持続不可能だ

(require as any).ensure(...); // require has no method 'ensure' in Node 
let tmr: number = setTimeout(...) as any; // returns a 'Timer' in Node 

:例えば - 私はany、必要に応じて散乱きた過去に。より良い方法がありますか?

答えて

0

回避策として、ノードからの入力requireを無効にすることができます。

tsconfig.jsontypeRootsを明示的に設定してください。この場合、@typesフォルダはタイプの検索には使用されません。カスタムタイプのルートでは、@ types(node.d.tsを除く)からtypyngへの///参照を使用してindex.d.tsファイルを作成できます。また、カスタム入力ルートにnode.d.tsの修正されたカスタムバージョンを提供することもできます。

最高の解決策ではありません。

:)あなたは何とか参照を維持する必要があり、ノードタイピングのカスタムバージョン(typeRootsに関する情報についてhttp://www.typescriptlang.org/docs/handbook/tsconfig-json.htmlを参照してください)

更新:短所は明白ですここで見つける

もう一つの答え: https://github.com/DefinitelyTyped/DefinitelyTyped/issues/11324#issuecomment-265046822

nodeを使用するファイルと、使用しないファイルのグループごとに別々のtsconfig.jsonファイルを作成できます。ここでは、グループに適用するタイピングを明示的に選択することができます。 入力名のセットを維持する必要がありますが、はるかに小さくなります。

関連する問題