TypeScript(十) Map对象、元组、联合类型、接口

news2024/9/19 10:34:48

1. Map对象

1.1. 简述

  Map对象保存键值对,并且能够记住键的原始插入顺序。
  任何值都可以作为一个键或一个值。

1.2. 创建 Map

  使用Map类型和new 关键字来创建Map:
如:

let myMap = new Map([
    ["key1", "value1"],
    ["key2", "value2"]
]);

1.3. Map相关函数与属性

(1)Map.clear() – 移除Map对象的所有键值对。
(2)Map.set() – 设置键值对,返回Map对象。
(3)Map.get() – 返回键对应的值,如果不存在,则返回undefined。
(4)Map.has() – 返回一个布尔值,用于判断Map中是否包含键对应的值。
(5)Map.delete() – 删除Map中元素,删除成功返回true,失败返回false。
(6)Map.size() – 返回Map对象键值对的数量。
(7)Map.keys() – 返回一个Iterator对象,包含了Map对象中每个元素的键。
(8)Map.values() – 返回一个新的Iterator对象,包含了Map对象中每个元素的值。

1.4. 实例

let nameSiteMapping = new Map();
// 设置 Map 对象
nameSiteMapping.set("Google", 1);
nameSiteMapping.set("Runoob", 2);
nameSiteMapping.set("Taobao", 3);
// 获取键对应的值
console.log(nameSiteMapping.get("Runoob")); //40
// 判断 Map 中是否包含键对应的值
console.log(nameSiteMapping.has("Taobao")); //true
console.log(nameSiteMapping.has("Zhihu")); //false
// 返回 Map 对象键/值对的数量
console.log(nameSiteMapping.size); //3
// 删除 Runoob
console.log(nameSiteMapping.delete("Runoob")); // true
console.log(nameSiteMapping);
// 移除 Map 对象的所有键/值对
nameSiteMapping.clear(); //清除 Map
console.log(nameSiteMapping);

执行结果:
在这里插入图片描述

1.5. Map的迭代

  Map.keys()与Map.values()都会获取一个迭代对象,可用于循环处理。
实例:

let nameSiteMapping = new Map();
nameSiteMapping.set("Google", 1);
nameSiteMapping.set("Runoob", 2);
nameSiteMapping.set("Taobao", 3);
// 迭代 Map 中的 key
for (let key of nameSiteMapping.keys()) {
    console.log(key);
}
// 迭代 Map 中的 value
for (let value of nameSiteMapping.values()) {
    console.log(value);
}
// 迭代 Map 中的 key => value
for (let entry of nameSiteMapping.entries()) {
    console.log(entry[0], entry[1]);
}
// 使用对象解析
for (let [key, value] of nameSiteMapping) {
    console.log(key, value);
}

执行结果:
在这里插入图片描述

2. 对象

2.1. 简述

  我们知道数组中元素的数据类型一般都是相同的(any[]类型的数组可以不同),如果存储的元素类型不同,则需要使用元组。
  元组中允许存储不同类型的元素,元组可以作为参数传递给函数。2、创建元组的语法格式:

var tuple_name = [value1,value2,value3,…value n]

实例:

//声明一个元组并初始化
var mytuple = [2,"Android"];
//或者我们先声明一个元组,在初始化:
var mytuple = [];
mytuple[0] = 110; 
mytuple[1] = 220;

2.2. 访问元组

  元组中元素是使用索引来访问的,并且索引是从0开始的,即第一个元素的索引是0,一直到最后一个n-1。
  访问语法格式:

tuple_name[index]

实例:

var mytuple = [50, "Harmony","Android"]; // 创建元组
console.log(mytuple[0]);
console.log(mytuple[1]);

执行结果:
在这里插入图片描述

2.3. 元组运算

  我们可以对元组元素进行新增或删除操作:
(1)push() – 向元组添加元素,添加是从后面添加的。
(2)pop() – 从元组中删除元素,并且删除是最后一个且返回移除的元素。

var mytuple = [10, "Hello", "World", "typeScript"];
console.log("添加前元素个数:" + mytuple.length); // 返回元组的大小
mytuple.push(12); // 添加到元组中
console.log("添加后元素个数:" + mytuple.length);
console.log("删除前元素个数:" + mytuple.length);
console.log(mytuple.pop() + " 元素从元组中删除"); // 删除并返回删除的元素
console.log("删除后元素个数:" + mytuple.length);

执行结果:
在这里插入图片描述

3. 对象

3.1. 简述

  联合类型可以通过管道(|)将变量设置多种类型,赋值时可以根据设置的类型来赋值。
  注意:只能赋值指定的类型,如果赋值其它类型就会报错的。

3.2.创建联合类型的语法格式:

Type1|Type2|Type3

实例:

var val: string|number
val = 12
console.log("数字为 ="+ val)
val ="Database"
console.log("字符串为 ="+ val)

执行结果:
在这里插入图片描述
 &emsp联合类型可以作为参数使用。
 &emsp联合类型数组:

var arr:number[]|string[]; 
var i:number; 
arr = [1,2,4] 
console.log("**数字数组**")  
for(i = 0;i<arr.length;i++) { 
   console.log(arr[i]) 
}  
arr = ["Runoob","Google","Taobao"] 
console.log("**字符串数组**")  
for(i = 0;i<arr.length;i++) { 
   console.log(arr[i]) 
}

执行结果:
在这里插入图片描述

4. 接口

4.1. 简述

  接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要有由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法。

4.2. 接口的定义

interface interface_name { 
}

实例:

interface IPerson { 
    firstName:string, 
    lastName:string, 
    sayHi: ()=>string 
} 
var customer:IPerson = { 
    firstName:"Tom",
    lastName:"Hanks", 
    sayHi: ():string =>{return "Hi there"} 
} 
console.log("Customer 对象 ") 
console.log(customer.firstName) 
console.log(customer.lastName) 
console.log(customer.sayHi())  
var employee:IPerson = { 
    firstName:"Jim",
    lastName:"Blakes", 
    sayHi: ():string =>{return "Hello!!!"} 
} 
console.log("Employee  对象 ") 
console.log(employee.firstName) 
console.log(employee.lastName)

执行结果:
在这里插入图片描述
  以上实例我们定义一个接口Iperson,接着定义了一个变量customer,它的类型是IOperson。
  Customer实现了接口Ioperson的属性和方法。
  注意:接口不能JavaScript,它知识TypeScript的一部分。

4.3. 联合类型和接口

实例:

interface RunOptions { 
    program:string; 
    commandline:string[]|string|(()=>string); 
} 
// commandline 是字符串
var options:RunOptions = {program:"test1",commandline:"Hello"}; 
console.log(options.commandline)  
// commandline 是字符串数组
options = {program:"test1",commandline:["Hello","World"]}; 
console.log(options.commandline[0]); 
console.log(options.commandline[1]);   
// commandline 是一个函数表达式
options = {program:"test1",commandline:()=>{return "**Hello World**";}};  
var fn:any = options.commandline; 
console.log(fn());

执行结果:
Hello
Hello
World
Hello World

4.4.接口继承

  接口继承就是说接口可以通过其他接口来扩展自己。
  Typescript 允许接口继承多个接口。
  继承使用关键字 extends。
  单接口继承语法格式:

Child_interface_name extends super_interface_name

  多接口继承语法格式:

Child_interface_name extends super_interface1_name, super_interface2_name,,super_interfaceN_name

  继承的各个接口使用逗号 , 分隔。
(1)单继承实例:

interface Person { 
   age:number 
} 
interface Musician extends Person { 
   instrument:string 
} 
var drummer = <Musician>{}; 
drummer.age = 27 
drummer.instrument = "Drums" 
console.log("年龄:  "+drummer.age)
console.log("喜欢的乐器:  "+drummer.instrument)

执行结果:
年龄: 27
喜欢的乐器: Drums
(2)多继承实例

interface IParent1 { 
    v1:number 
} 
 
interface IParent2 { 
    v2:number 
} 
 
interface Child extends IParent1, IParent2 { } 
var Iobj:Child = { v1:12, v2:23} 
console.log("value 1: "+Iobj.v1+" value 2: "+Iobj.v2)

执行结果:
value 1: 12 value 2: 23

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

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

相关文章

docker私有库

1.registry私有仓库 拉取registry镜像 docker pull registry 修改docker配置文件并重启 vim /etc/docker/daemon.json {"insecure-registries": ["172.16.23.23:5000"], #添加&#xff0c;注意用逗号结尾"registry-mirrors": ["ht…

网络编程之ip地址

目录 1、概念&#xff1a; 2、所属的tcp/ip协议的层 3、IP地址查询 &#xff08;1&#xff09;Linux &#xff08;2&#xff09;windows 4、IP地址结构组成及分类 &#xff08;1&#xff09;组成&#xff08;网络位主机位&#xff09; &#xff08;2&#xff09;分类 1、…

Linux进程控制:进程创建与等待

目录 一、fork函数 1.1fork函数的调用与功能 1.2fork函数的返回值与写实拷贝 1.3fork的常规用法与失败原因 二、进程终止 2.1进程的退出场景和常见退出方法 2.2_exit函数与exit函数 2.2.1_exit函数 2.2.2exit函数 2.3return退出 三、进程等待 3.1wait及waitpid的方法…

MFC串行化的应用实例

之前写过一篇MFC串行化的博文;下面看一个具体例子; 新建一个单文档应用程序;在最后一步,把View类的基类改为CFormView; 然后在资源面板编辑自己的字段; 然后到doc类的头文件添加对应变量, public:CString name;int age;CString sex;CString dept;CString zhiwu;CStrin…

CentOS部署Docker Registry镜像仓库并结合内网穿透实现远程访问

文章目录 1. 部署Docker Registry2. 本地测试推送镜像3. Linux 安装cpolar4. 配置Docker Registry公网访问地址5. 公网远程推送Docker Registry6. 固定Docker Registry公网地址 Docker Registry 本地镜像仓库,简单几步结合cpolar内网穿透工具实现远程pull or push (拉取和推送)…

山海鲸可视化:引领银行管理进入数据可视化新时代

在金融领域&#xff0c;数据是决策的关键。作为山海鲸可视化的开发者&#xff0c;我们深知数据的价值&#xff0c;并致力于通过可视化技术为银行管理提供更为直观、高效的数据分析工具。 应用场景&#xff1a; 风险管理&#xff1a;银行在运营过程中面临各种风险&#xff0c;如…

Collections集合工具类-JAVA

java.util.Collections:是个集合工具类它不是集合&#xff0c;而是集合的工具类 常用 API&#xff1a;注意 binarySearch 方法要求元素有序 方法实现&#xff1a; public class Test01 {public static void main(String[] args) {ArrayList<String>list1new ArrayList…

双非本科准备秋招(12.2)—— 力扣栈与队列

复习一下栈和队列的基础知识&#xff0c;刷几道题上上手。 1、102. 二叉树的层序遍历 广度优先遍历嘛&#xff0c;每次拓展一个新结点&#xff0c;就把新结点加入队列&#xff0c;这样遍历完队列中的元素&#xff0c;顺序就是层序遍历。 class Solution {public List<Lis…

输电线路图像监视系统研发背景及应用

输电线路建设在野外&#xff0c;在自然环境下&#xff0c;恶劣天气、地质灾害以及人为因素破坏会给线路运行带来巨大挑战&#xff0c;特别是偏远山区、林区、“三跨”等巡线困难区域。传统人工巡视存在局限性&#xff0c;巡视范围有限&#xff0c;线路运维人员压力倍增。 不过近…

[职场] 面试主播试镜要做些什么 #经验分享#笔记

面试主播试镜要做些什么 1.准备独立的空间做直播室&#xff0c;入镜的地方要干净整洁&#xff0c;不能堆太多杂物。可以装扮的温馨一点&#xff0c;也可以根据节日等装扮房间&#xff0c;比如最近圣诞节&#xff0c;放一些圣诞节的装饰物。 2.调试好话筒、灯光等直播设备&#…

JVM篇----第二十篇

系列文章目录 文章目录 系列文章目录前言一、垃圾收集算法二、调优命令有哪些?三、Minor GC与Full GC分别在什么时候发生?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的…

LeetCode:206反转链表

206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 不难&#xff0c;小细节是单写一个循环&#xff0c;把特殊情况包含进去&#xff0c; 单链表核心&#xff1a;上一个结点&#xff0c;当前结点&#xff0c;下一个结点&#xff0c; 代码&#xff1a;注释&#xff08;算是…

YOLOv5独家改进:上采样算子 | 超轻量高效动态上采样DySample,效果秒杀CAFFE,助力小目标检测

💡💡💡本文独家改进:一种超轻量高效动态上采样DySample, 具有更少的参数、FLOPs,效果秒杀CAFFE和YOLOv5网络中的nn.Upsample 💡💡💡在多个数据集下验证能够涨点,尤其在小目标检测领域涨点显著。 收录 YOLOv5原创自研 https://blog.csdn.net/m0_63774211/cate…

路由重定向和别名

聚沙成塔每天进步一点点 本文内容 ⭐ 专栏简介1. 路由重定向实例场景&#xff1a;路由重定向的应用场景&#xff1a; 2. 路由别名实例场景&#xff1a;路由别名的应用场景&#xff1a; ⭐ 写在最后 ⭐ 专栏简介 Vue学习之旅的奇妙世界 欢迎大家来到 Vue 技能树参考资料专栏&…

韶音、南卡、Oladance值不值得买?全面对比测评拒绝智商税!

​在目前市场上&#xff0c;有许多质量不佳、音质差的开放式耳机产品。这些产品不仅会影响音频的质量&#xff0c;还可能对用户的听力健康造成潜在风险。作为一名经验丰富的音频设备评测师&#xff0c;我深知在选择耳机时&#xff0c;必须谨慎选择那些具有专业实力的品牌。基于…

基于EdgeWorkers的边缘应用如何进行单元测试?

随着各行各业数字化转型的持续深入&#xff0c;越来越多企业开始选择将一些应用程序放在距离最终用户更近的边缘位置来运行&#xff0c;借此降低延迟&#xff0c;提高应用程序响应速度&#xff0c;打造更出色的用户体验。 相比传统集中部署和运行的方式&#xff0c;这种边缘应…

字段使用函数是否会走索引

之前的印象中&#xff0c;字段上使用了函数操作&#xff0c;查询不会走索引。 一&#xff0c;AI回答 回答1 回答2 回答3 二&#xff0c;测试样例 查询未来n天内所有数据 查询方式1 EXPLAIN SELECT * FROM vehicle_info WHERE annual_inspection_due_date BE…

Vulnhub靶机:hackme2-DHCP

一、介绍 运行环境&#xff1a;Virtualbox(攻击机)和VMware(靶机) 攻击机&#xff1a;kali&#xff08;192.168.56.106&#xff09; 靶机&#xff1a;hackme2-DHCP&#xff08;192.168.56.107&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1…

重写Sylar基于协程的服务器(2、配置模块的设计)

重写Sylar基于协程的服务器&#xff08;2、配置模块的设计&#xff09; 重写Sylar基于协程的服务器系列&#xff1a; 重写Sylar基于协程的服务器&#xff08;0、搭建开发环境以及项目框架 || 下载编译简化版Sylar&#xff09; 重写Sylar基于协程的服务器&#xff08;1、日志模…

厨师帽佩戴识别摄像机​

厨师帽佩戴识别摄像机是一种用于识别厨师是否佩戴帽子的智能设备&#xff0c;其作用在于强制执行食品安全卫生标准&#xff0c;防止头发掉落入食物中。该摄像机利用人工智能和图像识别技术&#xff0c;能够识别厨师是否佩戴厨师帽。当摄像机检测到厨师未佩戴帽子时&#xff0c;…