当我的打印代码发布到npm时,如何处理d.ts文件

我一直在关注这篇文章:

如何创build强types的npm包

并一直试图设置我的打字稿项目发布到NPM。

这一切似乎都有道理,但没有涉及的是如何处理d.ts文件。

我的项目看起来有点像这样:

 src node server.ts browser client.ts common contracts.d.ts 

所以当我用"declaration": true编译这个"declaration": true"outDir: "dist"我得到:

 dist node server.js server.d.ts browser client.js client.d.ts 

我的server.ts文件和client.ts文件都有

 import {SomeType} from "../common/contracts"; 

所以当别人使用这个包的时候,typescript编译将会失败,因为server.d.tsclient.d.ts都会导入。

节点将运行正常,虽然client.jsserver.js没有这个导入。 tsc必须删除d.ts文件的导入。

我想要发生的是将contracts.d.ts文件作为构build的一部分复制到dist文件夹中。 我如何做到这一点,作为tsc构build的一部分?

目前的解决方法

我目前正在做的事情是将我的contracts.d.ts重命名为contracts.ts ,这意味着所有必需的文件都存在于dist文件夹中,但这意味着客户端和服务器都必须加载只包含空的contracts.js文件

 "use strict"; //# sourceMappingURL=contracts.js.map 

我想我已经想出了一个很好的解决办法。 我已经将我的声明文件移动到合同文件夹中,所以我的项目如下所示:

 src node server.ts browser client.ts dist node server.js server.d.ts browser client.js client.d.ts contracts common.d.ts 

然后,我只是在npm包中包含合同文件夹,并使用../../contracts/common导入文件。 这个path既可以在编译时从src文件夹中运行,也可以在构build这个软件包时从dist文件夹运行。

如果虽然合同只是types,我仍然会在.ts文件中声明它们。 还是从其他地方产生合同?