我在打字稿中创建一个地图,如下所示:
let typeMap = new Map();
并设置一个key:像这样的字符串值:
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]
我得到:
元素隐式具有'any'类型,因为类型'string'的表达式不能用于索引类型'{“ key1”:string; “ key2”:字符串; “ key3”:字符串; }'。
在类型'{“” key1“:上未找到参数类型为'string'的索引签名。 “ key2”:字符串; “ key3”:字符串; }'
答案 0 :(得分:2)
您可能会对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));