当前位置: 首页 > backend >正文

梳理一下 @types/xxx

一、TypeScript 怎么知道库的类型?

ypeScript 在编译时需要知道函数、变量、对象的 类型 才能做检查。对于第三方库,类型信息有三种来源:

  1. 库本身自带类型声明

    • 比如 axios、vue、react 等现代库,源代码里就自带 index.d.ts 类型声明文件。

    • 这种情况下,你只要安装库本身就行,TS 就能找到类型信息。

npm install axios
import axios from "axios";
axios.get("/api"); // axios 自带类型推断
  1. DefinitelyTyped 提供的 @types/xxx 包
    • 有些库(比如早期写的 JS 库:lodash-es、jquery、express)没写 TypeScript 类型。

    • 社区把类型声明写好后,统一放到 DefinitelyTyped 仓库,然后发布到 npm 的 @types 命名空间下。

这就是你看到的:

npm install lodash-es
npm install -D @types/lodash-es

TypeScript 会自动去 node_modules/@types 文件夹里找对应的类型声明。

  1. 自己写 .d.ts 声明文件

    • 如果某个库既没有自带类型,也没有 @types/xxx,你就得自己写类型声明文件。

写法比如:

// types/some-lib.d.ts
declare module "some-lib" {export function foo(bar: string): number;
}

二、为什么有的需要 @types,有的不用?

总结下来就是:

  • 现代库(新出的库) → 一般直接在项目里自带 .d.ts 文件 → 不用装 @types

  • 老库(纯 JS 写的库) → 没有类型 → 社区补充 @types/xxx 包 → 要单独装 @types

  • 没人维护的库 → 可能没有任何类型声明 → 只能自己写 .d.ts

三、TypeScript 查找类型的优先级

当你写 import _ from “lodash-es” 时,TypeScript 按以下顺序查找类型:

  1. 库内部的 package.json 里是否声明了 types 或 typings 字段

    • 指向一个 .d.ts 文件。

    • 比如 axios/package.json 里有 “types”: “index.d.ts”。

  2. 库根目录是否有 index.d.ts

    • 如果有,就用这个文件。
  3. 是否安装了对应的 @types/xxx 包

    • TypeScript 会自动去 node_modules/@types/xxx 目录找。
  4. 没有找到

    • TS 把库当成 any,你就失去了类型提示和检查。

四、举几个例子

库名是否自带类型是否需要 @types
axios✅ 自带❌ 不需要
react✅ 自带(17 之后)❌ 不需要
vue✅ 自带❌ 不需要
lodash-es❌ 没有✅ 需要 @types/lodash-es
express❌ 没有✅ 需要 @types/express
jquery❌ 没有✅ 需要 @types/jquery
http://www.xdnf.cn/news/19666.html

相关文章:

  • java面试中经常会问到的多线程问题有哪些(基础版)
  • think
  • ubuntu系统设置中文失败问题
  • grpc-swift-2 学习笔记
  • 均匀分布直线阵的常规波束形成方位谱和波束图
  • (Arxiv-2025)ConceptMaster:基于扩散 Transformer 模型的多概念视频定制,无需测试时微调
  • 【2025终极对决】Python三大后端框架Django vs FastAPI vs Robyn,你的选择将决定项目生死?
  • [光学原理与应用-366]:ZEMAX - 用成像原理说明人眼为什么能看清物体?
  • 两款超实用办公插件推荐:Excel聚光灯与Word公文排版
  • MySQL 多表查询方法
  • Spring Boot 全局字段处理最佳实践
  • mysql初学者练习题(从基础到进阶,相关数据sql脚本在最后)
  • 59.螺旋矩阵II
  • 框架-SpringMVC-1
  • WPF中的静态资源和动态资源
  • 支付系统设计模式应用:从单例到观察者模式实践
  • 网络编程 05:UDP 连接,UDP 与 TCP 的区别,实现 UDP 消息发送和接收,通过 URL 下载资源
  • EPLAN 分散式端子:提升原理图设计效率的实用功能
  • 使用 C 模仿 C++ 模板的拙劣方法
  • Replit在线编程工具:支持多语言环境免配置与实时协作,助力编程学习调试与社区项目复用
  • 企业微信员工聊天记录能看吗?合规管理三要素一次性说清
  • cuDNN深度解析:实战演练
  • Electron 菜单与托盘:构建用户友好的界面元素
  • 9月2日
  • 深入分析 json2(新)与标准的 jsonrpc的区别
  • zephyr设备树的硬件描述转换为c语言
  • Hash 算法 SHA-1、SHA-256、SHA-384、SHA-512 对比
  • SpringBoot3 + Netty + Vue3 实现消息推送(最新)
  • 食品分类案例
  • 码住!辉芒微MCU型号规则详细解析