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

Posted

技术标签:

【中文标题】如何使用 package.json 中的 typesVersions 字段为较新的 typescript 版本提供更严格的类型?【英文标题】:How do I use the typesVersions field in package.json to ship stricter types for newer typescript versions? 【发布时间】:2020-02-15 19:33:15 【问题描述】:

根据the TypeScript 3.1 release notes,typescript 提供了一种通过在package.json 中设置typesVersions 字段来在npm 包中传送更严格类型的方法,如下所示:


  "name": "package-name",
  "version": "1.0",
  "types": "./index.d.ts",
  "typesVersions": 
    ">=3.1":  "*": ["ts3.1/*"] 
  

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

【问题讨论】:

刚刚发现了一个正在开发的全新工具,并更新了我的答案。请再看一遍。 【参考方案1】:

更新:看起来一位 TS 团队成员刚刚开始为此开发工具(可能是一个副项目)。在撰写本文时,它似乎还没有完成,但绝对值得一看。 https://github.com/sandersn/downlevel-dts


(原答案)

据我所知,还没有人编写过自动生成这些文件的工具。来自 TypeScript 团队成员的最新公开消息是 they don't intend to add this 作为编译器功能。也是requested here,没有任何回应。所以你现在可能会被困在手动翻译中。

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

【讨论】:

以上是关于如何使用 package.json 中的 typesVersions 字段为较新的 typescript 版本提供更严格的类型?的主要内容,如果未能解决你的问题,请参考以下文章

您如何使用 package.json 中的“文件”和“目录”属性?

如何从 Typescript 中的 package.json 获取版本?

如何使用 Jenkins 自动化 package.json 中的版本号

如何使用 package.json 中的“version”属性作为 grunt 中的应用程序目录?

如何在我的反应项目中使用 package.json 依赖项中的系统变量?

要加载 ES 模块,请在 package.json 中设置 "type": "module" 或使用 .mjs 扩展名