对于已发布的包,@types 应该是什么依赖类型?

What dependency type should @types be for a published package?

我正在创建一个我打算发布到 NPM 的包。我正在用 typescript 编写包,并将我的 tsconfig 文件设置为发出 typescript 声明文件以及编译的 javascript,这样使用 typescript 的其他人可以在他们的 IDE 中获得正确的类型信息 - 非常标准.我正在使用一些 DefinitelyTyped 包,但不确定它们应该是什么依赖类型。如果有人在 typescript 项目中使用我的包,我的声明文件将需要安装相关的 @types 包,但如果他们使用 javascript,则不需要安装这些包。我认为 @types 包应该在我包的 package.json 文件的 optionalDependencies 中。这是正确的吗?

According to Brian Terlson,范围对等依赖应作为经验法则使用。

正常依赖(不推荐)

您选择 @types 的版本,但不能保证它与您的消费者使用的版本相匹配。例如,当您的用户在节点 11 上时,您可能会选择 @types/node@10.0.0

开发依赖(不推荐)

因为当你的消费者安装你的包时它们没有安装,他们需要自己将它添加到他们的项目中(假设他们使用的是 TypeScript)。

源代码中镜像的开发依赖项(有时推荐)

如果您对 @types/* 的使用很少,那么在您的代码中反映使用的类型定义可能是有意义的。模仿第三方定义所做的并将其保留在您的代码中。缺点是必须使您自己的定义与其原始版本保持同步。

同伴依赖(推荐)

中间地带。它们将被您的包和消费者的包安装和重用。唯一想到的问题是当多个库依赖于某些 @types/*,但它们的版本不匹配时。