将打字稿代码发布到 npm 时如何处理 d.ts 文件

How do I deal with d.ts files when publishing my typescript code to npm

我一直在关注这篇文章:

How to create strongly-typed npm packages

并且一直在尝试设置我的打字稿项目以将其发布到 npm。

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

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

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

所以当我用 "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 仍然有这个导入。

Node 会 运行 正常,因为 client.jsserver.js 没有这个导入。 tsc 必须删除 d.ts 个文件的导入。

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

当前的解决方法

我目前正在做的是将我的 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

然后我将 contracts 文件夹包含在 npm 包中并使用 ../../contracts/common 导入文件。此路径既适用于编译时的 src 文件夹,也适用于构建此包时的 dist 文件夹。

如果合同只是类型,我仍然会在 .ts 文件中声明它们。或者合同是从其他地方生成的?