TypeScript小白入门篇之接口

TypeScript中接口起到的作用是明确规定一个对象应该具有哪些属性以及属性的类型是什么,保证对象的规范和一致性、使开发者在编写代码时获得清晰的结构定义和类型提示、又或是不同组件或模块之间进行通信的数据结构。

接口如何工作

当我们使用对象作为函数参数时,如果参数类型直接在参数列表中声明,那么当我们在其他地方调用该函数并传入一个对象时,TS自带的类型检查器只会检查被传入的对象是否含有必要的属性;如果参数类型以接口的方法声明,类型检查器就会严格检查传入对象的每个属性的类型是否一致。不过类型检查器并不会检查属性的顺序。

//参数类型直接在参数列表中声明
function square(config: {color:string, width:number}): void {
}
//参数类型用接口进行声明
interface squareconfig {
	color: string;
	width: number;
}

function square(config: squareconfig):void {

}

可选属性

可选属性只需要在接口的属性名后加一个?就可以声明。一方面,可选属性可以进行预定义,在调用函数传入对象时,可以直接使用{}创建对象并且对一部分属性赋值再传入函数中;另一方面,可选属性使得开发者在代码编写时如果引用了不存在的属性,TS将会直接捕获该错误。

interface square{
	color?: string;
	width?: number;
}

只读属性

只读属性使用readonly进行声明,它使得这个属性只能在对象刚刚创建时进行赋值。

interface square {
	readonly color: string;
	readonly width: number;
}

typescript中也有ReadonlyArray属性,它和Array属性类型,只是去掉了所有可变方法。

let array: ReadonlyArray<number> = [1,2,3,4];

如果你需要一个变量拥有只读属性,那么就使用const关键字;如果你需要一个属性拥有只读属性,那么就使用readonly关键字。
需要注意的是,typescript对于对象字面量(也就是用花括号{}创建的对象)会进行额外的属性检查,当你将它赋值给一个变量或者传入一个函数时,如果这个对象字面量含有目标类型不含有的属性,你会仅仅得到一个报错。虽然可以使用类型断言和
索引签名的方式绕开额外的属性检查,但这通常是不明智的。

函数类型

如果你想要使用接口声明函数类型,那当你在声明接口时,需要为它写上调用签名,这让接口看起来像是一段参数列表和返回值,比如这样:

interface functype {
	(width: number, height: number): boolean;
} 

怎样使一个函数将这个接口作为它的函数类型呢,你只需要像这样:

let myFunc: functype;
myFunc = function(wid: number, hei: number): boolean {

}

你不必令参数列表中的参数名完全一致,因为函数会逐个检查,只需对应位置上的参数类型是兼容的;你甚至也不必写上参数类型,类型系统自然会进行类型推断。

可索引类型

你也可以使用接口来描述那些本来可以通过索引访问得到的变量,例如a[10]或者ageMap['Dehaan']。这听起来和函数类型有些异曲同工之妙,不是吗。就像我们在函数类型那里为接口写上调用签名一样,这里我们也要为可索引类型写上索引签名了,索引签名描述索引的类型和按索引访问后返回值的数据类型。

interface strArray {
	[index: number]: string;
}
let myArray:strArray;
myArray = ['Dene', 'Army'];

typescript仅支持数字和字符串这两种索引签名。
你也可以给索引签名加上关键字readonly,这样索引就会是只读的,有效避免索引被赋值。

类类型

实现接口

你可以用接口明确地强制一个类符合某种规定。比如在接口中声明一个方法,然后在类中实现它。
使用implements关键字。

继承接口

接口之间可以相互继承,一个接口可以继承多个接口。
使用extends关键字。

混合类型

一个接口可以声明为既是函数类型又是普通接口。

interface Counter {
    (start: number): string;
    interval: number;
    reset(): void;
}

function getCounter(): Counter {
    let counter = <Counter>function (start: number) { };
    counter.interval = 123;
    counter.reset = function () { };
    return counter;
}

let c = getCounter();
c(10);
c.reset();
c.interval = 5.0;

接口继承类

当一个接口继承了一个类时,它会继承类的成员但不包括成员的实现。
使用extends关键字。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

英伟达与斯坦福携手,打造未来全息XR眼镜:头带时代的终结

在XR(扩展现实)技术的演进过程中,一个显著的挑战在于如何平衡设备的便携性与视觉体验。传统的XR设备由于需要厚重的头带固定光学器件和显示器,不仅增加了体积,还为用户带来了社交上的不便。然而,随着英伟达与斯坦福大学戈登韦茨斯坦教授领导的研究团队的合作,这一难题似…

meilisearch的分页

Elasticsearch 做为老牌搜索引擎&#xff0c;功能基本满足&#xff0c;但复杂&#xff0c;重量级&#xff0c;适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求&#xff0c;极快&#xff0c;单文件&#xff0c;超轻量。 所以&#xff0c;对于中小型项目来说…

探地雷达正演模拟,基于时域有限差分方法,四

突然发现第三章后半部分已经讲了使用接收记录成像的问题&#xff0c;所以这一章只讲解简单的数据分析。 &#xff08;均以宽角法数据为例子&#xff0c;剖面法数据处理方式都是相同的&#xff09;假设&#xff0c;我们现在已经获得了一个GPR记录&#xff0c;可以是常用的.sgy格…

DAY03 HTML

文章目录 一 表格1. 表格的语法2. 表格的可选标记3. 不规则的单元格&#xff08;合并单元格&#xff09;4. 表格的属性5. 表格的大小 二 列表1. 有序列表2. 无序列表3. 属性4. 列表的嵌套5. 定义列表【了解】 三 表单(重点)1. 表单的语法2. 表单的控件分类3. input元素4. selec…

为什么说Python 是胶水语言?

​ "Python 是胶水语言"这一说法是指它很擅长将不同的程序或代码库连接在一起&#xff0c;能够让来自不同编程语言或框架的组件无缝协作。Python 具有丰富的库和简单的语法&#xff0c;使得它可以轻松调用其他语言编写的程序或使用不同技术栈的模块。 ​ 以下是几个…

如何区分人工智能生成的图像与真实照片(下)

4 功能上的不合理性 AI 生成的图像往往会因为缺乏对现实世界物体结构和相互作用的了解&#xff0c;而产生各种功能不合理之处。这些不合理之处主要表现在以下几个方面&#xff1a; 4.1 构图不合理 物体关系不合逻辑: AI 生成的图像中&#xff0c;物体和人物之间的关系可能不符…

哈希表、递归在二叉树中的应用-1372. 二叉树中的最长交错路径

题目链接及描述 1372. 二叉树中的最长交错路径 - 力扣&#xff08;LeetCode&#xff09; 题目分析 题目所述&#xff0c;计算在二叉树中交替遍历的最大深度【左->右->左】【右->左->右】&#xff0c;例如对于从当前根节点root出发&#xff0c;则此时遍历方向有两个…

持续集成jenkins+gitee

首先要完成gitee部署&#xff0c;详见自动化测试git的使用-CSDN博客 接下来讲如何从git上自动拉取代码&#xff0c;实现jenkins无人值守&#xff0c;定时执行测试&#xff0c;生成测试报告。 需要这三个安装包 由于目前的jenkins需要至少java11到java17的版本&#xff0c;所以…

JavaScript——初识:JavaScript的组成、输入和输出语句... | JavaScript基础:变量,数据类型转换

目录 初识JavaScript JavaScript的组成 输入和输出语句 ECMAScript 6保留关键字 变量的命名规范 注意事项 JavaScript基础 变量的数据类型 数据类型分类 数据类型转换 转换为字符串型 转换为数字型 转换为布尔型 例题 初识JavaScript JavaScript的组成 Java…

搭建自己的AI模型应用网站:JavaScript + Flask-Python + ONNX

1. 前言 本文作者以一个前端新手视角&#xff0c;部署自己的神经网络模型作为后端&#xff0c;搭建自己的网站实现应用的实战经历。目前实现的网页应用有&#xff1a; AI 语音服务主页AI 语音识别AI 语音合成AI CP号码生成器 欢迎大家试用感受&#xff0c;本文将以博客基于G…

大数据—“西游记“全集文本数据挖掘分析实战教程

项目背景介绍 四大名著&#xff0c;又称四大小说&#xff0c;是汉语文学中经典作品。这四部著作历久不衰&#xff0c;其中的故事、场景&#xff0c;已经深深地影响了国人的思想观念、价值取向。四部著作都有很高的艺术水平&#xff0c;细致的刻画和所蕴含的思想都为历代读者所…

MyBatis使用 PageHelper 分页查询插件的详细配置

1. MyBatis使用 PageHelper 分页查询插件的详细配置 文章目录 1. MyBatis使用 PageHelper 分页查询插件的详细配置2. 准备工作3. 使用传统的 limit 关键字进行分页4. PageHelper 插件&#xff08;配置步骤&#xff09;4.1 第一步&#xff1a;引入依赖4.2 第二步&#xff1a;在m…

河南省文化旅游发展相关统计数据(2014-2023年)

数据时间&#xff1a;2014-2023年&#xff0c;近10年 数据格式&#xff1a;excel 数据来源&#xff1a;中国旅游统计年鉴、河南省统计公报 数据内容&#xff1a;包括河南省近10年来游客量、旅游总收入、旅游景区数量&#xff08;包括A级&#xff09;、星级酒店数、旅行社数、公…

mongodb-java apispringboot整合mongodb

mongodb入门mongodb-java api的使用springboot整合mongodb评论 一 MongoDB 1.1 MongoDB简介 ​ MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 ​ MongoDB是一个介于关系数据库和非关系数据库之间的产品&…

双链表——AcWing.827双链表

双链表 定义 双链表是链表的一种&#xff0c;它的每个节点有两个指针&#xff0c;一个指向前一个节点&#xff0c;一个指向后一个节点。这样使得链表可以双向遍历。 运用情况 频繁进行前后双向遍历操作时非常有用&#xff0c;比如在一些需要来回移动处理数据的场景。可以方…

嵌入式学习——Linux高级编程复习(TCP编程)——day44

基于TCP聊天: clientA.c clientB.c socket socket connect bind listen acce…

2024年了! 为什么还在用串口服务器?

在数字化飞速发展的2024年&#xff0c;串口服务器这一看似古老的技术仍然在工业自动化、远程监控和数据通信等领域发挥着重要作用。本文将从串口服务器的定义、功能、优势和使用场景四个方面来探讨&#xff0c;为什么串口服务器在今天仍然被广泛使用。 1. 什么是串口服务器 串口…

基于51单片机的红外计数器-1602显示

一.硬件方案 本设计的主要原理为&#xff1a;红外发射管发射红外线&#xff0c;红外接收管接收红外线&#xff0c;并且接收管当有红外线照射的时候&#xff0c;电阻比较小&#xff0c;当无线外线照射的时候电阻比较大&#xff0c;这样就可以通过一个电压比较器和一个基准电压进…

线程池ThreadPoolExecutor使用指南

线程池ThreadPoolExecutor使用指南 &#x1f9d0;使用线程池的好处是什么&#xff1f; 统一管理&#xff0c;减少资源获取创建的开销&#xff0c;提高利用率。 &#x1f527;线程池的参数 ​ThreadPoolExecutor​ 3 个最重要的参数&#xff1a; ​corePoolSize​ : 任务队列…

Linux系统编程:基础IO

目录 1.C语言文件回顾 2.系统文件I/O 2.1 系统接口介绍 2.2 文件描述符fd 2.3 重定向 2.4 理解缓冲区 2.5 理解文件系统 1.C语言文件回顾 在学习系统文件的操作之前&#xff0c;还记得C语言是如何进行对文件的操作的吗&#xff1f;下面看C语言接口&…