问题描述
我有一些类型定义想要转换成 npm 包,因为我在多个不相关的项目中使用它们。 (我可能会称它为 @dfoverdx/ts-magic
。)其中一些项目使用 3.x,一些使用 >=4.2,其中引入了 leading and middle rest elements in tuple types。
是否可以编写多个仅使用在用户版本的 TypeScript 中工作的类型的声明文件?
我认为有四种方法可能有效,但如果可能的话,我还不太了解如何实施。
-
使用
tsconfig.json
中的lib
值,用户可以指定要包含的 ts-magic 声明文件。然后每个声明文件可以使用三斜杠指令来引用以前版本的声明文件。 -
我可以有多个依赖于先前子包的子包。我宁愿不走这条路,尤其是在 there is no such thing as a nested scope in NPM 之后,我不想使用与我的 GitHub 用户名不同的范围,也不想在
@dfoverdx
范围下维护多个单独的包。因此我们遇到了另一个问题:其中一些类型是强类型的全局对象方法 如 Object.fromEntries(), 以及在
declare global {}
环境上下文中声明的事物--as 据我所知——不能仅限于包含 声明文件。也就是说,如果我的项目的 index.ts 导入了@dfoverdx/ts-magic/3.8
,因为我完全导入了@dfoverdx/ts-magic
,它将包含包的每个声明文件。 -
使用
package.json
或其他一些我不知道的属性在peerDependencies
中的一些魔法。
我无法想象这不是以某种方式做到这一点的方法。想法正确吗?
解决方法
您可以在 package.json
文件中使用 typesVersions 属性。