如何使用 package.json 中的 typesVersions 字段为较新的 TypeScript 版本提供更严格的类型?

bra*_*kim 6 types build npm typescript

根据TypeScript 3.1 发行说明typesVersions,TypeScript 提供了一种通过设置字段在 npm 包中传递更严格类型的方法,package.json如下所示:

{
  "name": "package-name",
  "version": "1.0",
  "types": "./index.d.ts",
  "typesVersions": {
    ">=3.1": { "*": ["ts3.1/*"] }
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,文档没有说明指定ts3.1/index.d.ts文件是如何创建的。我是否必须index.d.ts在此位置手动写入文件?有没有办法使用打字稿或相关的构建工具有条件地生成更严格的类型?

Tha*_*you 8

2023 年,TypeScript 4.9 及更高版本

\n

exports优先于typesVersions

\n

以前,当通过under解析时,TypeScript 错误地将typesVersions字段优先于字段。如果此更改影响您的库,您可能需要在\xe2\x80\x99s字段中添加版本选择器。执行此操作的正确方法是现在使用 field -exportspackage.json--moduleResolution node16types@package.jsonexportsexports

\n
{\n      "type": "module",\n      "main": "./dist/main.js"\n      "typesVersions": {\n          "<4.8": { ".": ["4.8-types/main.d.ts"] },\n          "*": { ".": ["modern-types/main.d.ts"] }\n      },\n      "exports": {\n          ".": {\n              "types@<4.8": "4.8-types/main.d.ts",  \xe2\x9c\x85\n              "types": "modern-types/main.d.ts",    \xe2\x9c\x85\n              "import": "./dist/main.js"\n          }\n      }\n  }\n
Run Code Online (Sandbox Code Playgroud)\n


ecr*_*345 2

更新

看起来 TS 团队成员刚刚开始为此开发一个工具(可能是一个业余项目)。截至撰写本文时,它似乎尚未完成,但绝对值得一看。 https://github.com/sandersn/downlevel-dts

原答案

据我所知,还没有人编写过自动生成这些文件的工具。TypeScript 团队成员最近对此的公开言论是,他们不打算将其添加为编译器功能。这里也提出了要求,但没有得到回应。因此,您现在可能会陷入手动翻译的困境。

(从概念上讲,执行此操作的工具很像“ Babel for types”:消除新的语法/关键字和“polyfilling”或消除新的类型助手。甚至可以编写为 Babel 插件。)