如何知道@types中的typescript类型定义与实际包匹配



我已经在node.js项目中使用typescript一段时间了。据我所知,对于许多npm包来说,有一个单独的@types包用于typescript类型定义。

我的问题是:当@types包单独维护时,我怎么知道@types包与实际包的最新版本是最新的?

例如,有一个没有typescript定义的npm包better-sqlite3,然后有一个单独的类型定义包@types/better-sqlite3。包的用户如何知道类型与包的当前版本匹配?

在这里的回答中,据说"JS包的TypeScript类型是最好的努力,取决于社区对包的兴趣"。这听起来有点吓人。

  1. 如果软件包开发人员自己维护定义,则没有@types,d.ts只是在软件包发行版中构建

  2. 如果有@types,您可以检查两个软件包的最后更新日期(@types在自述文件中有Last updated),@types在最后更新时可能是正确的。

  3. 如果@types过时了,你可以自己更新,甚至在@types上发布,这是"JS包的TypeScript类型",这是最好的努力,取决于社区对包的兴趣。意味着

不应该单独维护types包。包的作者应该将相应的类型包作为dependency列出,这意味着当您安装顶级包时应该出现正确的类型版本。

裁判:https://github.com/Microsoft/types-publisher/issues/81

编辑:正如@Gwydion在评论中指出的,有一些包是在原始包之外由社区维护的。一个很好的例子是:

https://www.npmjs.com/package/better-sqlite3

看起来很可能下面的包是正确的类型包:

https://www.npmjs.com/package/@types better-sqlite3

但是,这也不一定很明显。如果有信号来验证这是正确的包就好了。

我是这样做的:

  1. 我访问了原始的npm包页面,注意到存储库的URL是:https://github.com/WiseLibs/better-sqlite3

  2. 我访问了类型包的存储库URL,它是:https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/better-sqlite3(这个URL在类型包的npm页面下的详细信息中列出)

  3. 打开位于那里的index.d.ts文件。顶部列出:Project: https://github.com/JoshuaWise/better-sqlite3.

注意:https://github.com/JoshuaWise/better-sqlite3重定向到https://github.com/WiseLibs/better-sqlite3,这与我们在上面#1中找到的匹配。

最新更新