我已经在node.js项目中使用typescript一段时间了。据我所知,对于许多npm包来说,有一个单独的@types包用于typescript类型定义。
我的问题是:当@types包单独维护时,我怎么知道@types包与实际包的最新版本是最新的?
例如,有一个没有typescript定义的npm包better-sqlite3,然后有一个单独的类型定义包@types/better-sqlite3。包的用户如何知道类型与包的当前版本匹配?
在这里的回答中,据说"JS包的TypeScript类型是最好的努力,取决于社区对包的兴趣"。这听起来有点吓人。
-
如果软件包开发人员自己维护定义,则没有
@types
,d.ts
只是在软件包发行版中构建 -
如果有
@types
,您可以检查两个软件包的最后更新日期(@types
在自述文件中有Last updated
),@types
在最后更新时可能是正确的。 -
如果
@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
但是,这也不一定很明显。如果有信号来验证这是正确的包就好了。
我是这样做的:
我访问了原始的npm包页面,注意到存储库的URL是:https://github.com/WiseLibs/better-sqlite3
我访问了类型包的存储库URL,它是:https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/better-sqlite3(这个URL在类型包的npm页面下的详细信息中列出)
打开位于那里的
index.d.ts
文件。顶部列出:Project: https://github.com/JoshuaWise/better-sqlite3
.
注意:https://github.com/JoshuaWise/better-sqlite3重定向到https://github.com/WiseLibs/better-sqlite3,这与我们在上面#1中找到的匹配。