TypeScript9-声明文件

news2025/1/10 18:01:22

本篇文章来讲 TypeScript 的声明文件。

当我们在使用第三方库的时候,很多第三方库不是用 TS 写的,它们是通过原生的 JavaScript 或者是浏览器 / 或者是 node 提供的 run time 对象。如果我们直接使用 TS 肯定就会报编译不通过。

1. 声明语句

假设一个场景我们需要使用第三方库 JQuery。

之前的方式是在 html 中通过 script 标签引入 JQuery,这样就能全局使用 JQuery,我们通常会通过 jQuery('.app') 去获取对应的 DOM 对象。

但是在 TS 中并不知道 jQuery 是什么东西。

jQuery('app');

当我们直接使用会报错:Cannot find name 'jQuery'.

所以我们需要通过 declare 关键字来告诉 TS 这个变量已经在其他地方被定义了,你直接使用就可以了。

declare let jQuery: (selector: string) => any;

jQuery('app');

这样就不会再报错了。这里需要注意,declare let jQuery 并没有定义一个变量的实现,只是定义了全局变量 jQuery 的类型,仅仅会用于编程时的检查,并不是实现功能的真正代码。

2. 声明文件(.d.ts)

通常我们会把声明语句放在一个单独文件中,声明文件一般以 .d.ts 结尾的,d 就代笔声明。

有了声明文件我们就能享受 TS 带来的红利,在使用时就能获得代码补全和接口提示等功能。

一般来说,默认情况下,TS 编译器会解析项目中所有的 ts 文件,当然也包括 .d.ts 结尾的声明文件。所以上述例子中,我们也会把 jquery.d.ts 放入项目中去,这样所有的 ts 文件都能获得 jquery 的类型定义了。

3. definitelyTyped 社区

当我们想使用第三方库时,我们是不是需要从头到尾写它的声明文件呢?这个工作量显然是很大的。其实这个问题我们不需要考虑,因为TypeScript 社区已经帮我们写好了。

我们可以在 npm 官网 搜索要使用的第三方库的 TS 声明文件包。

比如上去例子中的 jquery,使用下面的命令就能下载安装 types/jquery 包,这个包中就包含 jquery 的的声明文件。

npm install --save @types/jquery

和上面说到的一样,@types/jquery 包中只有类型定义,并没有具体代码的实现。

@types 下的包和普通的 npm 模块是不一样的,它们统一由一个叫 definitelyTyped 的组织进行管理的,它是一个针对于不同库都要提供的一个高质量声明文件的社区,上面提到的 jquery 的声明文件就是由这个社区提供的。

现在有很多第三方库都已经自带了 TS 的声明文件,不需要分开安装了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/567708.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【学习日记2023.5.24】 之 用户端模块开发 用户端小程序_服务端接入微信认证_完善用户端商品浏览模块

文章目录 6. 用户端模块开发6.1 HttpClient6.1.1 介绍6.1.2 入门案例6.1.2.1 GET方式请求6.1.2.2 POST方式请求 6.2 微信小程序开发6.2.1 介绍6.2.2 准备工作6.2.3 入门案例6.2.3.1 小程序目录结构6.2.3.2 编写和编译小程序6.2.3.3 发布小程序 6.3 微信登录6.3.1 导入小程序代码…

MATLAB 之 绘制三维图形的基本函数、三维曲面和其他三维图形

文章目录 一、绘制三维曲线的基本函数二、三维曲面1. 平面网格坐标矩阵的生成2. 绘制三维曲面的函数3. 标准三维曲面 三、其他三维图形1. 三维条形图2. 三维饼图3. 三维实心图4. 三维散点图5. 三维杆图6. 三维箭头图 三维图形具有更强的数据表现能力,为此 MATLAB 提…

关于CSDN如何获得铁粉

一、发表高质量技术博客 获得铁粉首先是需要有粉丝关注,在CSDN有粉丝关注,就需要多发表写技术文章而且最好是高质量文章,条理清晰,复合当下主流技术,或者新的技术方向,图文并茂的那种。这样通过搜索引擎搜到…

虚拟专用网络-那些年你错过的“VPN 盲点”

我们先和海翎光电的小编一起了解一下什么是VPN,VPN的分类。对基础知识有一定的了解后,我们再来讲一下VPN的盲点。 VPN(全称:Virtual Private Network)虚拟专用网络,是依靠ISP和其他的NSP,在公共网络中建立专用的数据通信的网络技术…

Linux 网络基础(2)应用层(http/https协议、请求格式、响应格式、session、cookie、加密传输)

说明:网络基础2讲解的是应用层的典型协议, 通过对于典型协议的理解,来体会数据的网络传输的软件层面的流程与原理。 面试中网络通信相关问题占了很大的比重,而网络通信相关的问题大多都集中在网络基础2这个单元中 下面是应用层的位…

解决dpdk reserve的内存返回的虚拟地址和iova地址一样的问题

1. 背景: 在ubuntu20.04上用dpdk API: rte_memzone_reserve_aligned("L1L2_PCIE_MEMORY", 1.5*1024*1024*1024, rte_socket_id(), RTE_MEMZONE_1GB|RTE_MEMZONE_IOVA_CONTIG, RTE_CACHE_LINE_SIZE); 分配1.5…

a-form中的label超出隐藏

效果 代码: :deep(.ant-form-item-label) {display: flex;justify-content: flex-end;line-height: 16px; //这个数值视具体情况而定label { //这是关键white-space: nowrap;text-align: right;// color: #8a8a8a;max-width: 150px;// padding-right: 3…

OpenCV+ Qt Designer 开发人脸识别考勤系统

文章目录 1. 系统介绍2. 系统架构3. 开发步骤3.1 安装必要的库3.2 设计用户界面3.3 编写代码3.3.1 导入库3.3.2 连接数据库3.3.3 定义主窗口类3.3.4 实时显示摄像头画面3.3.5 进行人脸识别3.3.6 手动打卡3.3.7 显示打卡时间3.3.8 显示图片3.3.9 运行主程序 4. 总结 1. 系统介绍…

day13 - 对指纹图片进行噪声消除

在指纹识别的过程中,指纹图片通常都是现场采集的,受环境的影响会有产生很多的噪声点,如果直接使用,会对指纹的识别产生很大的影响,而指纹识别的应用场景又都是一些比较严肃不容有错的场合,所以去除噪声又不…

MySQL——存储引擎与索引应用

文章目录 一、 存储引擎1.1 MySQL结构1.2 存储引擎简介1.3 存储引擎特点1.3.1 InnoDB1.3.1.1 InnoDB 基本介绍1.3.1.2 InnoDB 逻辑存储结构 1.3.2 MyISAM1.3.3 Memory 1.4 三种引擎特点及区别1.5 存储引擎选择 二、 索引 - 重点2.1 介绍2.2 索引结构2.2.1 B-Tree 多路平衡二叉树…

网络安全面试题汇总(附答案)

作为从业多年的网络安全工程师,我深知在面试过程中面试官所关注的重点及考察的技能点。网络安全作为当前信息技术领域中非常重要的一部分,对于每一个从事网络安全工作的人员来说,不仅需要掌握一定的技术能力,更需要具备全面的综合…

Python学习之pygame模块介绍并制作代码雨

前言 对Python游戏有所了解的朋友都知道,在2D的游戏制作中,经常会用到一个模块pygame,他能帮助我们实现很多方便使用的功能,例如绘制窗口,反馈键盘鼠标信息,播放音频文件,渲染图片文字等等功能…

Java接口测试实战:掌握JMeter技能,让测试更高效!

目录 引言 一.java环境搭建 二.操作示例 1.添加信息头 2.添加请求路径和请求参数 3.添加单个文件 4添加文件集合 三.实操注意事项 1.登录 1.1登录界面断言注意事项 1.2登录界面定义token 2.首页 2.1http请求只有路径 2.2需要引用token变量 3.产品管理 3.1增加产…

Acrel 2000E/G配电室综合监控系统

1、概述 在信息化建设中,配电室运行处于信息交换管理的核心位置,这就要求配电室内所有设备需要时时刻刻正常运转,一旦某台设备出现故障,对数据传输、存储及系统运行构成威胁,就会影响到全局,如果不能及时处…

python flask p5.js mysql 实现数据库查询并网页显示数据(后附完整代码分享)

tips:不涉及session,是纯简单数据共享 实现步骤: 第一步:搭建框架第二步:创建数据库第三步:设计前端网页第四步:后端实现存储数据库整体实现需要的代码文件: 第一步:搭建框架 首先f…

Unity-vr用眼睛注视选择物体

Unity-vr用眼睛注视选择物体 文章目录 Unity-vr用眼睛注视选择物体工程版本用法说明脚本说明WatchController - 注视主控制器WatchEvent - 注视事件WatchGameobject - 被注视物体TimerTool - 计时器工具 总结 工程版本 unity2019.4.9f1 vs2019 项目工程源代码下载 用法说明 …

Windows 11 22H2 中文版、英文版 (x64、ARM64) 下载 (updated May 2023)

Windows 11 22H2 中文版、英文版 (x64、ARM64) 下载 (updated May 2023) Windows 11, version 22H2 官方原版,2023 年 5 月 更新 请访问原文链接:https://sysin.org/blog/windows-11/,查看最新版。原创作品,转载请保留出处。 作…

《计算之魂》引子

了解计算机基本原理的读者朋友可以跳过这个引子直接阅读第 1 章,因为本书其他章节并不依赖本章内容。不过,如果你愿意花上半小时读一读这一部分,相信会从数学和哲学层面对计算机以及计算的本质有更深刻的理解。 0.1 什么是计算机 如果你有…

混合属性mix-blend-mode不生效

下面的ABCDE是混合图层,box是他们的父级,一般浏览器支持都没什问题需要注意的是,确保父元素不是透明的, 我使用的时候发现给父元素rgba设置透明度这种方式没啥作用,还得是纯色,没去深究,设置纯色…

集成gtest进行单元测试之cmake应用

编写代码有bug是很正常的,通过编写完备的单元测试,可以及时发现问题,并且在后续的代码改进中持续观测是否引入了新的bug。对于追求质量的程序员,为自己的代码编写全面的单元测试是必备的基础技能,在编写单元测试的时候…