首页 > 解决方案 > 在打字稿中创建地图

问题描述

我在打字稿中创建了一个地图,如下所示:

let typeMap = new Map();

并设置一个 key: string 值,如下所示:

typeMap.set("key", "value");

我可以通过这样做成功地获得价值:

typeMap.get("key")

但是,我想为地图设置多个键值对,设置每个键值将是太多的代码。我试过这样做:

let typeMap = new Map<string, string>();
typeMap = {
   "key1": "value1",
   "key2": "value2"
   //etc
}

但我越来越

对象字面量只能指定已知属性,并且“key1”在类型 'Map 中不存在

我还尝试了以下方法:

  type typeMap = {
    [key: string]: string
  }
  let typeMap = {
    "key1": "value1",
    "key2": "value2",
    "key3": "value3"
  }

如果我尝试获得这样的静态值:

typeMap["key1"]

有用。但是,我有一个变量必须作为键传递才能获取值,当我尝试这样做时:

typeMap[variable]

我越来越:

元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型“{“key1”:字符串;“key2”:字符串;“key3”:字符串;}'。

在类型'{“key1”:字符串上找不到带有“字符串”类型参数的索引签名;“key2”:字符串;“key3”:字符串;}'

标签: typescript

解决方案


Map您可能会与JavaScript混淆objects。一个简单的 javascript 对象{}new Map(). 您已将 定义typeMap为“地图”,然后尝试使用对象对其进行更新。使用Map然后使用.get/.set或使用object您想要的界面:

// Use type
const typeMap = new Map<string, string>();
typeMap.set('key1', 'value1');

// would print value1
console.log(typeMap.get('key1'));


// Or use an interface
interface IMap {
    [key: string]: string;
}
const objectMap: IMap = {};
objectMap.key1 = 'value1';

const key = 'key1';
// in both cases, prints value1
console.log(objectMap.key1);
console.log(objectMap(key));

推荐阅读