【TypeScript入坑】TypeScript 的declare关键字、d.ts类型声明文件

TypeScript入坑

    • declare关键字
    • d.ts类型声明文件
      • 简介
      • 类型声明文件的来源
      • declare关键字
      • 模块发布
      • 三斜杠命令


declare关键字

declare 关键字用来告诉编译器,某个类型是存在的,可以在当前文件中使用。

它的主要作用,就是让当前文件可以使用其他文件声明的类型

🌰 举例来说,自己的脚本使用外部库定义的函数,编译器会因为不知道外部函数的类型定义而报错,这时就可以在自己的脚本里面使用 declare 关键字,告诉编译器外部函数的类型。这样的话,编译单个脚本就不会因为使用了外部类型而报错。

declare 关键字可以描述以下类型:

  • 变量(constletvar 命令声明)
  • type 或者 interface 命令声明的类型
  • class
  • enum
  • 函数(function
  • 模块(module
  • 命名空间(namespace

d.ts类型声明文件

简介

单独使用的模块,一般会同时提供一个单独的类型声明文件declaration file),把本模块的外部接口的所有类型都写在这个文件里面,便于模块使用者了解接口,也便于编译器检查使用者的用法是否正确。

🌰 举例,一个模块有代码如下:

const maxInterval = 12;function getArrayLength(arr) {return arr.length;
}module.exports = {getArrayLength,maxInterval,
};

👇 那么它的类型声明文件可以写成下面的形式

export function getArrayLength(arr: any[]): number;
export const maxInterval: 12;

类型声明文件的来源

类型声明文件主要有以下三种来源。

  • TypeScript 编译器自动生成。
  • TypeScript 内置类型文件。
  • 外部模块的类型声明文件,需要自己安装。

declare关键字

类型声明文件只包含类型描述,不包含具体实现,所以非常适合使用 declare 语句来描述类型。

类型声明文件里面,变量的类型描述必须使用 declare 命令,否则会报错,因为变量声明语句是值相关代码

declare let foo: string;

interface 类型有没有 declare 都可以,因为 interface 是完全的类型代码。

interface Foo {} // 正确
declare interface Foo {} // 正确

模块发布

当前模块如果包含自己的类型声明文件,可以在 package.json 文件里面添加一个 types 字段或 typings 字段,指明类型声明文件的位置。

{"name": "awesome","author": "Vandelay Industries","version": "1.0.0","main": "./lib/main.js","types": "./lib/main.d.ts" // 类型声明文件位置
}

三斜杠命令

如果类型声明文件的内容非常多,可以拆分成多个文件,然后入口文件使用三斜杠命令,加载其他拆分后的文件。

🌰 举例来说,入口文件是 main.d.ts,里面的接口定义在 interfaces.d.ts,函数定义在 functions.d.ts。那么,main.d.ts 里面可以用三斜杠命令,加载后面两个文件。

/// <reference path="./interfaces.d.ts" />
/// <reference path="./functions.d.ts" />

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

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

相关文章

RK3568教学实验箱_操作教程:5-15 直流电机控制实验

一、产品简介 TL3568-PlusTEB人工智能实验箱 国产高性能处理器 64 位 4 核低功耗 2.0 GHz超高主频 1T 超高算力 NPU 兼容鸿蒙等国产操作系统 二、实验目的 1、熟悉Qt程序的开发流程&#xff1b; 2、掌握Qt Creator的基础开发使用&#xff1b; 3、通过编写Qt程序实现直流…

操作无法完成,因为文件已在 SWVisualize2022.BoostService 中打开

在使用 Windows 卸载文件的时候&#xff0c;会出现下面的情况 类似于Linux的强制删除&#xff0c;我们需要首先停止服务&#xff0c;解决方案如下&#xff0c; 进入 cmd 命令行窗口&#xff0c;首先停止服务 net stop "SWVisualize2022.BoostService" 如果需要&am…

ANSYS Workbench三维随机多面体骨料混凝土细观

在三维混凝土细观的有限元模拟中&#xff0c;混凝土细观几何模型的建立是仿真前提&#xff0c;也是其难点。在ANSYS内高效的建立三维几何模型以匹配混凝土中多面体骨料的外形、分布、级配等参数&#xff0c;是三维混凝土细观有限元仿真模拟的关键。 随机多面体骨料3D模型的建…

香港科技大学广州|金融科技学域博士招生宣讲会——武汉大学、华中科技大学

&#x1f514;&#x1f514;&#x1f514;明日宣讲&#x1f514;&#x1f514;&#x1f514; &#x1f490;香港科技大学广州&#xff5c;金融科技学域博士招生宣讲会 &#x1f4cd;武汉大学专场 &#x1f559;时间&#xff1a;2024年9月24日&#xff08;星期二&#xff09;1…

fmql之字符驱动设备(1)

上一篇文章&#xff0c;记录了模块入口和出口函数的编写。 这一篇要继续编写字符驱动程序了。 仍然参考正点原子&#xff1a; 第3.3讲 我的第一个Linux驱动-字符设备驱动框架搭建实验_哔哩哔哩_bilibili 驱动注册和卸载 字符驱动设备的注册函数位register_chrdev 卸载函数…

让PlatformIO支持ESP32C3 SuperMini

先介绍一下这块小尺寸板子&#xff1a; ESP32C3SuperMini是一款基于 Espressif ESP32-C3 WiFi/蓝牙双模芯片的 IoT 迷你开发板。ESP32-C3 是一款32 位 RISC-V CPU&#xff0c;包含FPU&#xff08;浮点单元&#xff09;&#xff0c;可进行32 位单精度运算&#xff0c;具有强大的…

如何写出高收录词的listing文案,先做好这一点

在亚马逊上&#xff0c;关键词是连接买家搜索与产品之间的桥梁&#xff0c;超过80%的购买行为都是通过搜索关键词开始的。因此&#xff0c;文案中包含的精准关键词越多&#xff0c;Listing越能匹配买家的需求&#xff0c;从而提高自然排名并优化广告效果。 亚马逊的收录分为静…

vue.js 展示一个树形结构的数据视图,并禁用其中默认选中的节点

功能描述 展示树形结构&#xff1a; 使用 Element UI 的 <el-tree> 组件展示树形结构数据。数据由 content 数组提供&#xff0c;树形结构包含了嵌套的节点及其子节点。 默认选中节点&#xff1a; 使用 defaultCheckedKeys 属性指定默认选中的节点。这些节点在树形结构渲…

基于51单片机控制恒压供水系统设计

文章目录 前言资料获取设计介绍功能介绍设计程序具体实现截图文档目录设计获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设…

手把手教您轻松实现微信/QQ/TIM多开,消息防撤回!

文章目录 📖 介绍 📖🏡 环境 🏡📒 防回撤 📒🚀 自动补丁工具(支持多开,支持微信、QQ、TIM)🚀 最新版手动补丁📝 步骤一📝 步骤二⚓️ 相关链接 ⚓️📖 介绍 📖 在日常聊天中,微信消息被撤回的情况屡见不鲜,总让人心中充满好奇——那些被删去的内容…

【c数据结构】OJ练习篇 帮你更深层次理解链表!(相交链表、相交链表、环形链表、环形链表之寻找环形入口点、判断链表是否是回文结构、 随机链表的复制)

目录 一. 相交链表 二. 环形链表 三. 环形链表之寻找环形入口点 四. 判断链表是否是回文结构 五. 随机链表的复制 一. 相交链表 最简单粗暴的思路&#xff0c;遍历两个链表&#xff0c;分别寻找是否有相同的对应的结点。 我们对两个链表的每个对应的节点进行判断比较&…

量化交易----数据透视表----融资融券优惠代码

我们在制定和执行量化策略的过程中&#xff0c;常常需要快速检查目标因子组合的分组下portfolio的超额收益&#xff0c;我们来提供一个快速的方法&#xff0c;可以实现单因子分组&#xff0c;双因子分组和三因子分组 比如拿到一个分析师预测的数据库&#xff0c;和A股市场政策…

python:django项目知识点02——搭建简易授权码核销系统

前言 如标题所述&#xff0c;本篇博客主要围绕快速搭建业务系统展开&#xff0c;旨在&#xff1a;快速、逻辑分明。 适用对象 djangomysql&#xff0c;实现一套授权码核销功能&#xff0c;包含用户登录和授权码核销两个方面内容 业务代码 前述 基础代码已在上篇博客中讲述&…

Vue3:provide-inject实现组件通信

目录 一.作用 1.跨层级通信 2.避免重复声明 3.封装通用服务 二.性质 1.非响应式 2.不可选项 3.高级用法 三.使用 1.爷组件 2.父组件 3.子组件 四.代码 1.爷组件代码 2.父组件代码 3.子组件代码 五.效果 Vue3中的provide-inject机制是用于在组件树中进行依赖注…

01【MATLAB】最小二乘系统辨识

目录 1.系统辨识的定义及其分类 1.1 系统辨识的定义 1.2 系统辨识的分类 2.参数模型 3.系统辨识的步骤 一、最小二乘法&#xff08;Least Squares Method&#xff09;一般步骤 二、LSM原理及应用 三、LSM在控制系统建模中的应用 1.系统辨识的定义及其分类 1.1 系统辨识的…

有没有适合初学者的 OpenLayers 项目实战案例推荐?

对于初学者来说&#xff0c;OpenLayers 提供了一系列实用的项目实战案例&#xff0c;可以帮助你快速上手并掌握关键的开发技能。以下是一些推荐的入门项目案例&#xff1a; 1.基础地图显示&#xff1a; 学习如何创建一个简单的地图视图&#xff0c;并加载基础的地图图层&…

19个邮件群发小技巧,最大水平充分利用邮件营销

邮件群发在现代通信中占据着非常重要的位置。无论是在商业环境还是个人生活中&#xff0c;它都有着广泛的应用。无论您是公司的市场推广专家&#xff0c;还是社交团体的筹办者&#xff0c;掌握有效的邮件群发技巧会帮助您更好地传递信息、节约时间和提升工作效率。 确定目标受众…

DK5V100R20S双引脚同步整流芯片12V 2.4A封装SM-7

高性能双引脚同步整流芯片 DK5V100R20S是一款简单高效率的同步整流芯片&#xff0c;只有A&#xff0c;K两个引脚&#xff0c;分别对应肖特基二极管PN管脚。芯片内部集成了100V功率NMOS管&#xff0c;可以大幅降低二极管导通损耗&#xff0c;提高整机效率&#xff0c;取代或替换…

Debian安装mysql遇到的问题解决及yum源配置

文章目录 一、安装mysql遇到的问题解决二、Debain系统mysql8.0的安装以及远程连接三、彻底卸载软件四、Python 操作 mysql五、debian软件源source.list文件格式说明1. 第一部分2. 第二部分3. 第三部分4. 第四部分5. 关于源的混用问题6. 按需修改自己的sources.list7. 更新软件包…

详解运行时安全检测神器:Falco

在当今快速发展的云计算和容器技术时代,安全已成为组织面临的一大挑战。随着云原生应用的普及,传统的安全措施已不足以应对复杂的分布式环境。在这样的背景下,Falco应运而生,成为云原生安全领域的一颗新星。目前在github中&#xff0c;该项目已经拥有了7.3k的star&#xff0c;众…