我有一个节点模块A,这取决于另一个节点模块B,它们都是用Typescript编写的。模块B将Promise返回给A,并选择了蓝鸟作为Promise实现。 B当然有蓝鸟的类型。为什么在泄漏传递式实现类型时,tsc会给出如此神秘的错误?
但是,如果没有蓝鸟的分型(它可能不应该在我的情况),我得到这样的错误:
~/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发出更好的错误消息?
小更新: 当我“泄漏”是本地定义,这是在乙直接夹类型:
export interface CompletionsResponse extends Typehinted {
completions: [Completion]
}
interface Completion {
}
[TS] 住宅“完井”的出口接口具有或正在使用专用名称“完成”。 接口完成
我想能够直接赶上这种事情,如果我从像“bluebird'.Promise的依赖暴露的东西为好。我从来没有打算将“蓝鸟”暴露为传递依赖,而我实际上甚至不知道如何通过类型来做到这一点?因此,这样做很好,发生的事情是,'蓝鸟'在npm toungue中默默地成为了类似的“同伴依赖”。
泄漏类型究竟意味着什么? –
正是我在全文中描述的。我从bluebird泄漏Promise,并从一个没有蓝鸟类型的依赖者那里得到这些错误.Promise。在泄露我的意思是,这不是故意的 - 我应该从一开始就将公共API键入PromiseLike/Thenable,但我认为我需要一个更好的方法来捕捉这些tsc在dependee上编译错误。 –
纠正我,如果我理解错误:你有一个模块A,这取决于模块B,通过模块B Promise类型获取。例如。因为B声明文件指定'B.awesomeFunction()'返回一个(Bluebird)Promise?如果是这样的话,你确定模块B正确地处理它的类型依赖关系吗? –