Typescript Map类型
在 TypeScript 中,Map 类型是一种能够将键值对映射到对应值的数据结构。与 JavaScript 中的对象不同,Map 类型提供了更强大的功能和类型安全性。
基本用法
首先,我们来看一下 Map 类型的基本用法。在 TypeScript 中,我们可以使用 Map<键类型, 值类型>
来定义一个 Map 对象。例如:
let myMap: Map<string, number> = new Map();
上面的示例定义了一个 myMap
对象,其键的类型为字符串,值的类型为数字。我们可以使用 set
方法向 Map 中添加键值对,使用 get
方法获取值,使用 has
方法检查是否存在某个键,使用 delete
方法删除某个键值对。示例代码如下:
let myMap: Map<string, number> = new Map();
myMap.set('A', 1);
myMap.set('B', 2);
console.log(myMap.get('A')); // 输出:1
console.log(myMap.has('B')); // 输出:true
myMap.delete('A');
console.log(myMap.get('A')); // 输出:undefined
迭代器
Map 类型提供了多种迭代器方法,例如 forEach
、keys
、values
和 entries
。示例代码如下:
let myMap: Map<string, number> = new Map();
myMap.set('A', 1);
myMap.set('B', 2);
// 使用 forEach 方法遍历键值对
myMap.forEach((value, key) => {
console.log(`{key}:{value}`);
});
// 使用 keys 方法获取所有键
for (let key of myMap.keys()) {
console.log(key);
}
// 使用 values 方法获取所有值
for (let value of myMap.values()) {
console.log(value);
}
// 使用 entries 方法获取所有键值对
for (let entry of myMap.entries()) {
console.log(`{entry[0]}:{entry[1]}`);
}
泛型
Map 类型也支持泛型,可以使键和值的类型更加灵活。例如:
let myMap: Map<number, string> = new Map();
myMap.set(1, 'A');
myMap.set(2, 'B');
console.log(myMap.get(1)); // 输出:A
console.log(myMap.get(2)); // 输出:B
类型推断
在 TypeScript 中,Map 类型还支持类型推断。例如,我们不需要显式指定键值对的类型,TypeScript 可以根据初始值自动推断出类型。示例代码如下:
let myMap = new Map([
['A', 1],
['B', 2]
]);
console.log(myMap.get('A')); // 输出:1
console.log(myMap.get('B')); // 输出:2
只读Map
在 TypeScript 中,我们可以使用 ReadonlyMap
类型来创建只读的 Map 对象。只读 Map 对象只允许读取操作,不允许修改、添加或删除键值对。示例代码如下:
let myReadOnlyMap: ReadonlyMap<string, number> = new Map([
['A', 1],
['B', 2]
]);
// 编译报错
myReadOnlyMap.set('C', 3);
总结
总的来说,Map 类型是 TypeScript 中一个非常强大的数据结构,提供了丰富的功能和类型安全性。我们可以使用 Map 类型来存储键值对,并进行各种操作。同时,Map 类型还支持泛型、类型推断和只读 Map,使得我们能够更加灵活地应用它在项目中。