是否可以为不同版本的 TypeScript 使用不同的声明文件?

Is it possible to use different declaration files for different versions of TypeScript?

我有一些类型定义想变成 npm 包,因为我在多个不相关的项目中使用它们。 (我可能会称之为 @dfoverdx/ts-magic。)其中一些项目正在使用 3.x,而一些正在使用 >=4.2,其中引入了 leading and middle rest elements in tuple types

是否可以编写仅使用在用户版本的 TypeScript 中工作的类型的多个声明文件?

我认为有四种方法可能有效,但我不太了解如何实施,如果它们可能的话。

  1. 使用 tsconfig.json 中的 lib 值,用户可以指定要包含哪个 ts-magic 声明文件。然后每个声明文件都可以使用三斜线指令来引用以前版本的声明文件。

  2. 我可以有多个子包依赖于以前的子包。我宁愿不走这条路,特别是因为 there is no such thing as a nested scope in NPM,我不想使用与我的 GitHub 用户名不同的范围,我也不想在 [=13] 下维护多个单独的包=]范围。

    因此我们运行进入另一个问题:其中一些类型是强类型全局对象方法 如 , 以及在 declare global {} 环境上下文中声明的事物——如 据我所知——不能仅限于包含 它在其中声明的声明文件。也就是说,如果我的项目 index.ts 导入了 @dfoverdx/ts-magic/3.8,因为我完全导入了 @dfoverdx/ts-magic,它将包含包的每个声明文件。

  3. package.json 中的一些魔法使用 peerDependencies 或其他一些我不知道的 属性。

  4. 某种triple-slash directive. I suspect this is not the way

我无法想象这不是以某种方式做到这一点的方法。思考正确的方法?

您可以在 package.json 文件中使用 typesVersions 属性。