*间接*依赖项的“无法找到声明文件”的TypeScript错误

时间:2018-10-01 20:20:14

标签: typescript bluebird typescript-typings definitelytyped

我有以下"noImplicitAny": true项目,其项目为dependencies(不是devDependencies):

  • wr
    • u
      • bluebird

现在,当我尝试编译wr时,出现tsc错误:

node_modules/u/dist/src/lib/dynamo/Dynamo.d.ts:1:27 - error TS7016: Could not find a declaration file for module 'bluebird'. '/home/ronjouch/work/wr/node_modules/bluebird/js/release/bluebird.js' implicitly has an 'any' type.
  Try `npm install @types/bluebird` if it exists or add a new declaration (.d.ts) file containing `declare module 'bluebird';`

1 import * as Bluebird from 'bluebird';
                            ~~~~~~~~~~

但是:

  • wrbluebird无关,我不是想要@types/bluebird的devDeps / deps中的wr
  • u的{​​{1}}中有@types/bluebird,这是有道理的,因为它们需要构建devDependencies,但无法运行,所以我不想移动他们u(正常副手/ devDeps细微差别)。

我了解有关 my 项目代码的错误(和修复),但是当它发生在 indirect 依赖项上时,该怎么办?是否有TS机制来解决这种情况? (忽略dependencies的依赖项代码吗?自动获取类型?)

谢谢。

1 个答案:

答案 0 :(得分:1)

如果依赖于node_modules/u/dist/src/lib/dynamo/Dynamo.d.ts并由@types/bluebird加载的文件wr构成u的公共API的一部分,则official recommendation为将@types/bluebird放在dependencies的{​​{1}}中就是为了避免此问题。原则上,u支持package.json可以在u上声明的另一种依赖关系,当您在{{ 1}},但在运行@types/bluebird时不会。但是从我的角度来看,许多软件包将类型声明捆绑在同一软件包中,因此,如果@types/bluebirdnpm install中有wr,则将npm install --production添加到u并不比bluebird捆绑其类型声明更糟,人们不应该抱怨它。

如果dependencies不是@types/bluebird公用API的一部分,那么您应该弄清楚为什么dependencies正在加载它并中断链。 / p>