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

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.mfbz.cn/a/361062.html

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

相关文章

Prometheus---图形化界面grafana(二进制)

前言 Prometheus是一个开源的监控以及报警系统。整合zabbix的功能&#xff0c;系统&#xff0c;网络&#xff0c;设备。 proetheus可以兼容网络&#xff0c;设备。容器的监控。告警系统。因为他和k8s是一个项目基金开发的产品&#xff0c;天生匹配k8s的原生系统。容器化和云原…

iOS App审核状态和审核时间管理指

引言 对于一款开发完成并准备上架的 iOS 应用程序来说&#xff0c;通过苹果公司的审核是非常重要的一步。苹果公司会对应用程序进行严格的检查&#xff0c;以确保应用程序的质量和安全性。本文将介绍 iOS 应用程序审核的流程和时间&#xff0c;希望能够帮助开发者更好地了解和…

《Is dataset condensation a silver bullet for healthcare data sharing?》

一篇数据浓缩在医疗数据集应用中的论文。 其实就是在医疗数据集上使用了data condensation的方法&#xff0c;这里使用了DM的方式&#xff0c;并且新增了浓缩时候使用不同的网络。 1. 方法 数据浓缩DC的目的是&#xff1a; E x ∼ P D [ L ( φ θ O ( x ) , y ) ] ≃ E x ∼…

CPU-Cache结构查看

参考【Ubuntu 查看 CPU 缓存】 本文主要介绍cpu的cache查看&#xff0c;以供读者能够理解该技术的定义、原理、应用。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;计算机杂记 &#x1f380;CSDN主页 发狂的小花…

【昕宝爸爸小模块】深入浅出详解之常见的语法糖

深入浅出详解之常见的语法糖 一、&#x1f7e2;关于语法糖的典型解析二、&#x1f7e2;如何解语法糖&#xff1f;2.1&#x1f7e2;糖块一、switch 支持 String 与枚举2.2&#x1f4d9;糖块二、泛型2.3&#x1f4dd;糖块三、自动装箱与拆箱2.4&#x1f341;糖块四、方法变长参数…

什么是图形组态软件?可视化组态工具的特点

组态软件的定义 组态软件主要作为SCADA系统及其他控制系统的上位机人机界面的开发平台&#xff0c;为用户提供快速地构建工业自动化系统数据采集和实时监控功能服务。它使用灵活的组态方式&#xff0c;提供快速构建工业自动控制系统监控功能的通用层次的软件工具。 组态软件的…

【学网攻】 第(17)节 -- 命名ACL访问控制列表

系列文章目录 目录 前言 一、ACL(访问控制列表)是什么&#xff1f; 二、实验 1.引入 总结 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学网攻】 第(4)节 -- 交换机划分Vlan【学网攻】 第…

对于this.$nextTick代码的理解

我们都知道DOM的更新是异步的,Vue的绑定原理就是用数据区驱动视图,视图也能驱动数据&#xff0c;两者是双向绑定的。 如何立马获取到更新之后的DOM呢&#xff1f; 可以使用: <template><div class"" ref"aa">{{ a }}<button click"f…

TortoiseSVN各版本汉化包下载

首先进入下载版本列表 1.下载地址&#xff1a;https://sourceforge.net/projects/tortoisesvn/files ​ 2.选择自己版本进入​ 3.选择Language Packs进入&#xff0c;选择对应语言包下载。 ​ 4.在TortoiseSVN根目录下点击安装即可。 ​

Leetcode—1265. 逆序打印不可变链表【中等】Plus

2024每日刷题&#xff08;一零三&#xff09; Leetcode—1265. 逆序打印不可变链表 实现代码 /*** // This is the ImmutableListNodes API interface.* // You should not implement it, or speculate about its implementation.* class ImmutableListNode {* public:* v…

Django模型(六)

一、其它查询 文档:https://docs.djangoproject.com/zh-hans/4.1/ref/models/querysets/#count 1.1、排序 Queryset.order_by(*fields) 默认情况下,QuerySet 返回的结果是按照模型 Meta 中的 ordering 选项给出的排序元组排序的 可以通过使用 order_by 方法在每个 QueryS…

《QDebug 2024年1月》

一、Qt Widgets 问题交流 1. 二、Qt Quick 问题交流 1.Repeator 的 delegate 在 remove 移除时的注意事项 Qt Bug Tracker&#xff1a;https://bugreports.qt.io/browse/QTBUG-47500 Repeator 在调用 remove 函数之后&#xff0c;对应的 Item 会立即释放&#xff0c;后续就…

百川终入海 ,一站式海量数据迁移工具 X2Doris 正式发布

在大数据分析领域&#xff0c;Apache Doris 作为广受认可的开源实时数据仓库&#xff0c;已经在越来越多行业用户的真实业务场景中得到广泛应用&#xff0c;成为许多企业数据分析基础设施的重要基座。尤其在过去一年多的时间里&#xff0c;越来越多企业选择基于 Apache Doris 进…

【Linux驱动】块设备驱动(一)—— 注册块设备

针对块设备驱动将分为两部分介绍&#xff0c;第一部分是注册块设备&#xff0c;即将块设备成功添加到内核&#xff1b;第二部分是介绍如何读写块设备&#xff0c;因为没有实际块设备&#xff0c;这里选择使用内存来模拟块设备。 一、认识块设备 1、什么是块设备 块设备针对的…

抵御.360勒索病毒威胁:解密文件的有效方法与预防措施

导言&#xff1a; 近来&#xff0c;网络犯罪的一种新型形式——.360勒索病毒&#xff0c;备受关注。这种病毒通过加密用户文件&#xff0c;要求支付赎金以获取解密密钥。本文91数据恢复将深入介绍.360勒索病毒的特点&#xff0c;同时提供一些有效的恢复方法&#xff0c;并分享…

盘点那些硬件+项目学习套件:STM32MP157 Linux开发板及入门常见问题解答

华清远见20岁了~过去3年里&#xff0c;华清远见研发中心针对个人开发板业务&#xff0c;打造了多款硬件项目学习套件&#xff0c;涉及STM32单片机、嵌入式、物联网、人工智能、鸿蒙、ESP32、阿里云IoT等多技术方向。华清远见20岁了~过去3年里&#xff0c;华清远见研发中心针对个…

资深Android逆袭、华为鸿蒙为安卓程序员开辟了一条新道路

本文章主要从以下5个方面来展开聊聊这个话题&#xff1a; 1.什么是鸿蒙 2.鸿蒙系统发展时间线 3.鸿蒙是套壳Android吗&#xff1f; 4.鸿蒙的生态&#xff08;用户以及开发者&#xff09; 5.一些建议 1月18日&#xff0c;在鸿蒙生态千帆启航仪式上&#xff0c;华为宣布了继鸿蒙4…

【排序算法】C语言实现随机快排,巨详细讲解

文章目录 &#x1f680;前言&#x1f680;快排的核心过程partition&#xff08;划分过程&#xff09;&#x1f680;快排1.0&#x1f680;随机快速排序&#x1f680;稳定性 &#x1f680;前言 铁子们好啊&#xff01;继续我们排序算法今天要讲的是快排&#xff0c;通常大家所说…

ROS方向第二次汇报(2)

文章目录 1.本方向内学习内容&#xff1a;1.1.动作&#xff1a;1.1.1.案例接口定义:1.1.2.案例通信模型&#xff1a;1.1.3.服务器端代码&#xff1a;1.1.4.客户端源代码&#xff1a;1.1.5.动作命令行操作&#xff1a; 1.2.参数&#xff1a;1.2.1.查看参数列表&#xff1a;1.2.2…

14篇最新Transformer热门论文!涵盖注意力机制、架构改进、适用性扩展等

在深度学习技术的飞速发展中&#xff0c;Transformer模型无疑成为了当今研究的热点&#xff0c;它凭借其独特的架构和强大的表达能力&#xff0c;在自然语言处理、计算机视觉和语音识别等领域取得了令人瞩目的成果。 今天&#xff0c;特意为大家整理了14篇Transformer热门论文&…
最新文章