关于DefinitelyTyped与@types项目的关系及@types是否为最新类型定义方式的问询
关于DefinitelyTyped与@types的疑问解答
嘿,作为刚入门TypeScript的新手,能问到这两个点,说明你已经抓住了TS类型系统里很关键的部分啦!我来给你把这两个问题掰扯清楚:
1. DefinitelyTyped 和 @types 是同一个项目吗?
简单说——DefinitelyTyped是存放所有社区贡献的TS类型定义的「大本营仓库」,而你在npm里安装的@types/xxx包,就是从这个仓库里自动打包发布出去的npm包。比如你装的@types/react、@types/lodash,它们的代码全都是来自DefinitelyTyped仓库里对应的类型定义文件,通过自动化流程发布到npm的@types组织名下。
所以他俩是「源头仓库」和「分发出去的npm包集合」的关系,不是完全同一个东西,但核心内容是绑定死的——所有@types包的根儿都在DefinitelyTyped。
2. @types 是当前给项目添加类型定义的最新方式吗?
这个得分情况来看:
- 对于那些本身没有内置TS类型定义的第三方JS库来说,安装对应的@types包依然是目前最主流、最常用的方式,直到现在都还在广泛使用。
- 不过现在越来越多的流行库开始自带类型定义了——比如Vue 3、React 18+、Axios这些,它们的npm包里本身就包含了
.d.ts类型文件,根本不需要额外安装@types包。这种「内置类型」是现在的趋势,毕竟对开发者来说更省心。 - 还有一种极端情况:如果某个库既没内置类型,也找不到对应的@types包,那你可以自己编写自定义的
.d.ts声明文件,不过这属于进阶操作,新手暂时不用急着尝试。
总结一下:@types依然是当前补充类型定义的重要手段,但不是唯一的选择。随着越来越多库作者重视TypeScript,内置类型会越来越普遍,但@types在很长一段时间里都会是兼容旧库、填补类型空缺的关键工具。
内容的提问来源于stack exchange,提问作者elliance




