如果我要在npm模块中添加类型,我怎么能依赖全局类型呢?

If I'm adding typings to an npm module, how can I depend on global typings?

本文关键字:类型 怎么能 依赖 全局 如果 npm 模块 添加 我要      更新时间:2023-09-26

假设我编写一个节点模块m。后来,我决定向它添加Typescript类型。幸运的是,该模块只导出一个函数,因此m.d.ts文件如下所示:

/// <reference path="./typings/globals/node/index.d.ts" />
declare module "m" {
  doThings(b: Buffer): int;
  export = doThings;
}

我的函数使用节点的Buffer,所以我在安装的typings文件夹中包含了对节点类型的有效引用(没有它,Sublime给了我"无法找到名称'Buffer'消息,这似乎是一件坏事)。一切看起来都很好,所以我更新package.json中的typings键并进行部署。

另外,我在一个单独的typescript项目p中使用模块m。我不必担心使用typings,因为我的模块包含类型。当我运行tsc时,我得到以下错误:node_modules/m/m.d.ts(6,1): error TS6053: File '/Users/$USER/projects/p/node_modules/m/typings/globals/node/index.d.ts' not found.这很有意义,因为在node_modules中没有typings文件夹(我认为检查生成的文件夹是不鼓励的)。当一个类型文件被加载到DefinitelyTyped中时,它会去掉所有的三斜杠引用(最佳实践表明不应该在d.ts文件中包含它们)。当有一个类型文件加载到npm模块中时,没有任何东西被剥离。

所以,我的问题是:我能鱼与熊掌兼得吗?是否有可能在我的模块(m)中具有有效的类型,而不包括外部项目(p)中的破碎引用?

多谢了!

我能把蛋糕也吃了吗?是否有可能在我的模块(m)中具有有效的类型,而不包括外部项目(p)中的破碎引用?

您没有将node.d.ts作为参考标记。相反,你指定人们需要在他们的编译上下文中包含node.d.ts,例如使用tsconfig.json.

相关文章: