是否可以为不同版本的 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 用户名不同的范围,也不想在 @dfoverdx 范围下维护多个单独的包。

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

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

  4. 某种triple-slash directive。我怀疑this is not the way

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

解决方法

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