为什么在泄漏传递式实现types时,TSC会给出如此神秘的错误?

我有一个节点模块A取决于另一个节点模块B,都写在Typescript。 模块B将Promise返回给A,并select了蓝鸟作为Promise实现。 B当然有蓝鸟的types。

但是,如果A没有蓝鸟(它可能不应该在我的情况下)的types,我得到的错误如:

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

我花了一段时间才意识到,这是由于我泄漏了具体的Promisetypes的蓝鸟。 改变所有的公共返回types为PromiseLike使错误消失。

我的问题是,有没有办法在我的独立模块B上检测到这些? 我记得在模块泄漏之前没有公开的types时,有时会出错,但在这种情况下,模块B构build得很好。 对于我来说这件事情都很模糊,因为我对Typescript很陌生。 我认为Typescript是一个与我习惯的不同的野兽。

另外,对于这些情况,tsc不可能发出更好的错误消息吗?

小更新:当我“泄漏”一个本地定义的types时,直接在B:

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

[ts]导出接口的属性“完成”已经或正在使用专有名称“完成”。 界面完成

如果我从“bluebird”这样的依赖中暴露出某些东西,我希望能够直接捕捉到这种东西。 我从来没有打算把“蓝鸟”作为一种传递性的依赖,而且我甚至不知道如何用types来做这件事? 因此,这样的build设很好,发生的事情是“蓝鸟”在npm toungue中默默地成了一种类似的“同伴依赖”。

如果一个包具有对另一个模块的types依赖关系,那么这个依赖包应该被包含在包的typings.json ,其中typings.json typings install bluebird --save

你的模块B的types声明应该看起来像这个types声明为redux-persist (但在你的实际项目中)。 这取决于几种types的redux 。 因此, typings.json列出了依赖typings.json

关于打字稿错误信息,他们是一种痛苦。 ¯\_(ツ)_/¯