我有一个节点模块A,取决于另一个节点模块B,都是用Typescript编写的。模块B将Promises返回给A并选择bluebird作为Promise实现。 B当然有蓝鸟的打字。
但是,如果A没有bluebird的类型(在我的情况下可能不应该这样),我会收到如下错误:
~/d/p/ensime-vscode ❯❯❯ tsc -p . ⏎ master ✭ ✱
node_modules/ensime-client/**/file-utils.d.ts(1,26):
error TS2307: Cannot find module 'bluebird'.
我花了一段时间才意识到这是因为我泄漏了具体的Promise型蓝鸟。将所有公共返回类型更改为PromiseLike会使错误消失。
我的问题是,有没有办法在我的独立模块B上检测到这些?我记得有时在模块泄露之前没有公开的类型时会出现错误,但在这种情况下模块B构建得很好。这件事对我来说非常模糊,因为我对Typescript很新。我认为与我以前相比,Typescript是一个不同的野兽。
此外,tsc是否有可能针对这些情况发出更好的错误消息?
小更新: 当我&#m;"泄漏"本地定义的类型直接在B中捕获:
export interface CompletionsResponse extends Typehinted {
completions: [Completion]
}
interface Completion {
}
[TS] 财产'完成'导出的界面已经或正在使用私人名称'完成'。 界面完成
我希望能够直接捕捉到这种事情,如果我从像Bluebird' .Promise这样的依赖中暴露某些东西。我从来没有打算揭露蓝鸟'作为一种传递依赖,我老实说甚至不知道如何用打字来做到这一点?因此,这种情况很好,所发生的事情是“蓝鸟”#39;默默地成为一种典型的同伴依赖"在npm toungue。
答案 0 :(得分: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
。
关于打字稿错误消息,它们有点痛苦。 ¯\_(ツ)_/¯