【问题标题】:Which npm version of the javascript module should be installed with a DefinitelyTyped typescript wrapper?哪个 npm 版本的 javascript 模块应该安装有 DefinedTyped typescript 包装器?
【发布时间】:2026-02-02 20:20:02
【问题描述】:

我看到 Typescript 的类型声明/定义之间存在一些 API 偏差。应该如何正确配对 types 包的版本和底层 javascript 包的版本?

假设我在 package.json 中添加了对 @types/prompts": "^2.0.14" 的依赖项。我如何确保获得正确版本的 javascript npm 包?

npm 包 @types/prompts 对其 package.json 中的 javascript 模块没有显式依赖,而且我在 README 中似乎没有提到任何兼容性。

我发现的只是@types/promptsindex.d.ts 中的一条松散评论提及:

// Type definitions for prompts 2.0
// Project: https://github.com/terkelg/prompts
...

有我们应该遵循的约定吗?我有兴趣了解一般方法,不一定只针对此示例。

参考资料:

【问题讨论】:

  • 我投票结束这个问题,因为the README 有一个部分涵盖了这个主题。

标签: javascript typescript definitelytyped


【解决方案1】:

根据我的经验,通常主要和次要版本在上游包和它的 @types 包之间保持同步。那么补丁版本将不匹配,因为需要能够修复错误。

一个反应的例子:

  • react的当前版本是17.0.2
  • @types/react 的当前版本是 17.0.37

唯一不清楚的部分是上游包的补丁何时更改类型。是否已在 types 包中应用了该更改?

例如,react 决定发布 17.0.3,其中包含非破坏性的类型差异。我们如何知道 17.0.37 是否包含该更改?但为此,实际发布 17.1.0 以应对新变化可能是一个更好的主意。

【讨论】:

  • 谢谢。我对打字稿很陌生,如果这是官方故事,这让我大吃一惊。似乎在元数据中至少指定一个“推荐的”上游版本可能是有益的。它至少在某种程度上有助于解决您提到的歧义,并减少运行时错误(例如,因为您调用了不存在但通过编译的函数)。