2016-08-24 6 views
2

私はノードモジュールAを別のノードモジュールBに依存しています。どちらもTypescriptで書かれています。モジュールBはPromiseをAに戻し、Promiseの実装としてbluebirdを選択しました。 Bはもちろんブルーバードのためのタイピングがあります。 Aは、(それはおそらく私の場合ではないはずです)、私はのようなエラーが出青い鳥のタイピングがない場合推移的な実装タイプが漏れた場合、なぜtscはあまりにも致命的なエラーを出しますか?

しかし、:

~/d/p/ensime-vscode ❯❯❯ tsc -p .                                        ⏎ master ✭ ✱ 
node_modules/ensime-client/**/file-utils.d.ts(1,26): 
error TS2307: Cannot find module 'bluebird'. 

をこれが原因だったことを理解することが私にしばらく時間がかかりました青い鳥の具体的な約束のタイプを漏らして私に。すべてのパブリックリターンタイプをPromiseLikeに変更すると、エラーはなくなりました。

私の質問は、以前の私の独立したモジュールBでこれを検出する方法はありますか?私は以前に公開されていなかったタイプのモジュールが漏れたときに時々エラーが発生することを思い出しますが、この場合はモジュールBがうまく構築されました。私はTypescriptをとても新しくして以来、このことはとてもぼやけています。 Typescriptは私が慣れ親しんだものとは違う獣だと思う。

また、これらのケースでは、tscがより良いエラーメッセージを出すことはできませんか?

小更新: 私はローカルで、これがBに直接巻き込まれ定義されているタイプの「漏れた」んだ:

export interface CompletionsResponse extends Typehinted { 
    completions: [Completion] 
} 

interface Completion { 
} 

をエクスポートインタフェースの[TS] プロパティ「補完」がかプライベートネーム「完了」を使用しています。 インタフェース完了

私は、私も「bluebird'.Promiseのような依存関係から何かを暴露していた場合、直接この種のものをキャッチできるようにしたいと思います。 「ブルーバード」を過渡的な依存として公開することは決して私の意図ではありませんでした。正直なところ、タイピングを使ってそれを行う方法は分かりませんでした。ですから、これはうまくいきますが、起こったことは、「ブルーバード」がnpm toungueにタイピング「ピア依存」となったことです。

+0

タイプの漏れはどういう意味ですか? –

+0

私は全文で説明しているとおりです。私はブルーバードからプロミスを漏らしており、ブルーバードのためのタイピングがないデンピディーからこれらのエラーを得る。プロミス。私は公開APIをタイプしていたはずです:PromiseLike/Thenableへの初めから、これらのtscがdependeeでエラーをコンパイルするより良い方法が必要だと思います。 –

+0

私が間違っていると分かっていれば訂正してください:あなたはモジュールBを使っているモジュールAを持っています。例えば。 B宣言ファイルは 'B.awesomeFunction()'が(Bluebird)Promiseを返すように指定しているからです。その場合、モジュールBがタイプの依存関係を正しく処理していることを確認しましたか? –

答えて

1

パッケージに別のモジュールへの依存関係がある場合、この依存関係はパッケージtypings.jsonに含まれ、typings install bluebird --saveである必要があります。

モジュールBのタイプ宣言は、type declaration for redux-persistのようになりますが(実際のプロジェクト内では)それはdepends on redux for several typesです。したがって、dependency listed in the typings.jsonがあります。

タイスクリプトのエラーメッセージに関して、彼らは一種の痛みです。 ¯\_(ツ)_/¯

+0

ああ、まあ、私は何か非常に間違っていると思う。私は別にモジュールBの入力を公開していませんが、そのモジュールと一緒に公開しています。モジュールBは青い鳥の型を示しています.json、しかしモジュールAはtypings.jsonも持っていません。それはvscodeの拡張です... –

+0

また、私は実際にはモジュールAにさらされるブルーバードのタイピングを望んでいないので、これは私の質問への答えだとは思わない。あなたの例は私のモジュール 'B'と同じように見えます:https://github.com/ensime/ensime-node/blob/master/typings.json#L4 –

+0

また、モジュール 'A'に入力することは役に立ちません。同じ問題。 –

関連する問題