如何从节点模块中的@types保存类型

时间:2019-02-27 17:11:12

标签: typescript

我的问题源于以下情况:

我正在处理Typescript中的软件包A。我也用Typescript编写了程序包B,它将作为依赖项添加到程序包A中。

包B使用两个javascript模块(C和D),并直接从各自的@types库(@ types / C和@ types / D)导入类型。

虽然程序包B之所以可以构建是因为它在dev依赖项中具有@types,但程序包A却不会,因为它将抱怨它自己的依赖项中没有C和D的定义。

有什么办法可以使A生成,但要遵循以下约束条件:

  1. A不会将C和D的类型作为开发依赖项
  2. B不会将类型包括为非开发依赖项
  3. noImplicitAny必须在ts-config中设置为true

我希望的是一种在B中声明新类型的方法,这些新类型基本上是C和D中类型的副本,或者让A不关心其节点模块中的编译问题。

1 个答案:

答案 0 :(得分:1)

如果程序包B确实是一个独立的程序包,则您应仅将编译后的.js文件和来自B的.d.ts文件包括在A中(请参阅{{3}中的--declaration标志}(如果您当前未生成.d.ts文件)。这应该避免TypeScript尝试查找C和D的类型。

但是,如果您要从B公开的接口包含C和D的类型,那么事情会变得有些棘手。您可以:

  • 让B声明其自己的(等效)接口作为其接口的一部分,这是正确的,因为您要向A隐藏C和D。就A而言,C和D被视为B的无关实现细节。很担心。
  • 认为A实际上确实需要了解C和D,并将它们包含在其dev依赖项中。