在打字稿中创建地图

Bog*_*dan 5 typescript

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

let typeMap = new Map();
Run Code Online (Sandbox Code Playgroud)

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

typeMap.set("key", "value");
Run Code Online (Sandbox Code Playgroud)

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

typeMap.get("key")
Run Code Online (Sandbox Code Playgroud)

但是,我想为映射设置多个键值对,并且设置每个键值会需要太多代码。我尝试这样做:

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

但我越来越

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

我还尝试了以下方法:

  type typeMap = {
    [key: string]: string
  }
  let typeMap = {
    "key1": "value1",
    "key2": "value2",
    "key3": "value3"
  }
Run Code Online (Sandbox Code Playgroud)

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

typeMap["key1"]
Run Code Online (Sandbox Code Playgroud)

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

typeMap[variable]
Run Code Online (Sandbox Code Playgroud)

我越来越:

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

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

Kou*_*sha 6

您可能会对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));
Run Code Online (Sandbox Code Playgroud)