包的来源不同。@types 可以看成是由 TypeScript 官方为不同的包提供的类型定义。现在很多 package 本身就带类型定义,所以我们就不需要单独再去安装这个包的类型定义了,如果安装的包里面没有类型定义,首先我们要搜索的是 @types/包的名字,如果能找到对应的值,我们就需要单独再安装一下这个类型定义包。
types/包,应该是之前用的,现在不大用了,如果访问 https://github.com/types/ 这个地址,它上面也会说 Deprecated, use NPM @types in TypeScript 2+,也就是推荐我们去找 @types/ 前缀的类型定义包。
我们在项目里使用的 mysql2,包本身没有类型定义,@types/ 里也没有对应的类型定义。但 types/mysql2 是可以使用的,所以我们就安装使用了这个类型定义。
我当初也是搜索 mysql2 类型定义的时候,发现有人推荐要安装 types/mysql2,才知道的。