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

梳理一下 @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.dtcms.com/a/362876.html

相关文章:

  • 【Python语法基础学习笔记】竞赛常用标准库
  • 数据库的锁级别
  • Git在idea中的实战使用经验(一)
  • 深度学习之第五课卷积神经网络 (CNN)如何训练自己的数据集(食物分类)
  • SQLShift 实现Oracle 到 OceanBase 的存储过程转换初体验
  • FlowGPT-GPT提示词分享平台
  • 深入剖析Java设计模式之策略模式:从理论到实战
  • 【音视频】 WebRTC GCC 拥塞控制算法
  • 从Java全栈到前端框架:一场真实的技术面试实录
  • Leetcode二分查找(5)
  • 【算法】哈希表专题
  • 单元测试总结2
  • 【大前端】Vue 和 React 主要区别
  • dy图文批量下载
  • 【C++】模板(初阶)--- 初步认识模板
  • 从一行 var a = 1 开始,深入理解 V8 引擎的心脏
  • 【Linux我做主】进程退出和终止详解
  • 掌握设计模式--模板方法模式
  • 前缀树约束大语言模型解码
  • Ollama:本地大语言模型部署和使用详解
  • 【论文阅读】DeepSeek-LV2:用于高级多模态理解的专家混合视觉语言模型
  • ObjectMapper一个对象转json串为啥设计成注入?...
  • 【学Python自动化】 7. Python 输入与输出学习笔记
  • Pandas Python数据处理库:高效处理Excel/CSV数据,支持分组统计与Matplotlib可视化联动
  • 车载刷写架构 --- ECU软件更新怎么保证数据的正确性?
  • Ansible 循环、过滤器与判断逻辑
  • 【保姆级喂饭教程】把chrome谷歌浏览器中的插件导出为CRX安装包
  • Android init 实战项目
  • 文件页的预取逻辑
  • IAM(Identity and Access Management)