JS超集对TypeScript的Map对象以及联合类型的深入实战

简介: JS超集对TypeScript的Map对象以及联合类型的深入实战

@[toc]

一.TypeScript的Map对象

在这里插入图片描述

类型脚本映射对象。
map对象保存键值对,可以记住键的原始插入顺序。任何值(对象或原始值)都可以用作键或值。Map是ES6中引入的新数据结构。
Typescript使用地图类型和new关键字创建Map:

let myMap = new Map();

初始化映射,可以以数组的形式传入键值对:

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

Map对象相关功能和属性:

  • MapClear()–删除映射对象的所有键/值对。
  • MapSet()–设置键值对并返回映射对象。
  • MapGet()–返回与键对应的值。如果不存在,则返回undefined。
  • MapHas()–返回一个布尔值,用于确定映射是否包含与键对应的值。
  • MapDelete()–删除映射中的元素,如果删除成功则返回true,如果删除失败则返回false。
  • MapSize–返回映射对象键/值对的数目。
  • MapKeys()-返回一个迭代器对象,其中包含map对象中每个元素的键。
  • MapValues()–返回一个新的迭代器对象,其中包含map对象中每个元素的值。
let nameSiteMapping = new Map();

设置 Map 对象

nameSiteMapping.set("Google", 1);
nameSiteMapping.set("Runoob", 2);
nameSiteMapping.set("Taobao", 3);

获取键对应的值

console.log(nameSiteMapping.get("Runoob"));

判断 Map 中是否包含键对应的值

console.log(nameSiteMapping.has("Taobao"));   
console.log(nameSiteMapping.has("Zhihu"));  

返回 Map 对象键/值对的数量

console.log(nameSiteMapping.size);

删除 Runoob

console.log(nameSiteMapping.delete("Runoob"));  
console.log(nameSiteMapping);

移除 Map 对象的所有键/值对 , 清除 Map

nameSiteMapping.clear();           
console.log(nameSiteMapping);

使用 es6 编译:

tsc --target es6 test.ts

执行上述JavaScript代码,输出结果为:

2
true
false
3
true
Map { 'Google' => 1, 'Taobao' => 3 }
Map {}

1.1迭代 Map

地图对象中的元素按顺序插入。我们可以迭代map对象,每次迭代都返回[key,value]数组。
Typescript用于…Of来实现迭代:

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);            
}

二.TypeScript 联合类型

联合类型可以通过管道(|)将变量设置为多种类型。指定值时,可以根据设置的类型指定值。
注意:只能指定类型。如果分配了其他类型,将报告错误。
创建联合类型的语法格式如下:

Type1|Type2|Type3

声明一个联合类型:

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

编译上述代码以获得以下JavaScript代码:

var val;
val = 12;
console.log("数字为 " + val);
val = "Runoob";
console.log("字符串为 " + val);
数字为 12
字符串为 Runoob
function disp(name:string|string[]) { 
        if(typeof name == "string") { 
                console.log(name) 
        } else { 
                var i; 
                for(i = 0;i<name.length;i++) { 
                console.log(name[i])
                } 
        } 
} 
disp("Runoob") 
console.log("输出数组....") 
disp(["Runoob","Google","Taobao","Facebook"])

上述代码输出结果为:

Runoob
输出数组....
Runoob
Google
Taobao
Facebook

2.1扩展知识

对于联合类型数据,主要扩展了以下几点。
只能访问公共属性或方法
通常,使用关节类型是因为无法确定变量最终值的类型。
对于联合类型的变量或参数,如果无法确定其特定类型,则只能访问联合类型中所有类型通用的属性或方法。如果访问特定类型特有的属性或方法,将生成错误。

function sayRes(res: number | string) {
    if (res.length > 0) { // Error: 类型“number”上不存在属性“length”。
    }
}

2.2总结

  • 联合类型包含所有可能的变量类型;
  • 分配除联合类型变量之外的值将产生错误;
  • 在无法确定联合类型变量的最终类型之前,只能访问联合类型通用的属性和方法。
相关文章
|
9月前
|
JavaScript 前端开发
揭秘 TypeScript 条件类型:超越简单类型检查
揭秘 TypeScript 条件类型:超越简单类型检查
|
9月前
|
JavaScript 安全 索引
TypeScript 高级类型工具:Partial, Required, Record 的妙用与陷阱
TypeScript 高级类型工具:Partial, Required, Record 的妙用与陷阱
|
9月前
|
JavaScript 安全 IDE
TypeScript 类型体操:别让 `any` 毁了你的安全网!
TypeScript 类型体操:别让 `any` 毁了你的安全网!
|
6月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
392 1
|
6月前
|
存储 Java Go
【Golang】(3)条件判断与循环?切片和数组的关系?映射表与Map?三组关系傻傻分不清?本文带你了解基本的复杂类型与执行判断语句
在Go中,条件控制语句总共有三种if、switch、select。循环只有for,不过for可以充当while使用。如果想要了解这些知识点,初学者进入文章中来感受吧!
236 2
|
JavaScript 前端开发
如何在 JavaScript 中使用 __proto__ 实现对象的继承?
使用`__proto__`实现对象继承时需要注意原型链的完整性和属性方法的正确继承,避免出现意外的行为和错误。同时,在现代JavaScript中,也可以使用`class`和`extends`关键字来实现更简洁和直观的继承语法,但理解基于`__proto__`的继承方式对于深入理解JavaScript的面向对象编程和原型链机制仍然具有重要意义。
|
Web App开发 JavaScript 前端开发
如何确保 Math 对象的方法在不同的 JavaScript 环境中具有一致的精度?
【10月更文挑战第29天】通过遵循标准和最佳实践、采用固定精度计算、进行全面的测试与验证、避免隐式类型转换以及持续关注和更新等方法,可以在很大程度上确保Math对象的方法在不同的JavaScript环境中具有一致的精度,从而提高代码的可靠性和可移植性。
|
存储 安全 JavaScript
TypeScript-内置应用程序类型-Recode
通过使用 `Record` 类型,开发者可以显著提升代码的安全性和可维护性。无论是配置对象、字典结构还是动态表单,`Record` 类型都提供了一个简洁、类型安全的解决方案。
546 82
|
9月前
|
JavaScript 安全 编译器
TypeScript 类型守卫:让你的类型系统更智能
TypeScript 类型守卫:让你的类型系统更智能
|
12月前
|
编解码 JavaScript 前端开发
【Java进阶】详解JavaScript的BOM(浏览器对象模型)
总的来说,BOM提供了一种方式来与浏览器进行交互。通过BOM,你可以操作窗口、获取URL、操作历史、访问HTML文档、获取浏览器信息和屏幕信息等。虽然BOM并没有正式的标准,但大多数现代浏览器都实现了相似的功能,因此,你可以放心地在你的JavaScript代码中使用BOM。
349 23