这是我个人认为在各种语言中都是正确的,但在这里不是。我一定是对 Typescript 的一个方面一无所知,但我不能那么容易地确定差距在哪里。实施需要地图的地图。顶部映射是一个字符串键,以及字符串键和字符串值的映射。class aClass{ myMap: Map<string, Map<string, string>>; constructor () { this.myMap = new Map<string, Map<string, string>>([ ["key1", new Map<string,string>()], ["key2", new Map<string,string>()] ]); } async aTask(map: Map<string,string>) { map.set("subKey1", "VALUE"); } async someWork() { this.aTask(this.myMap["key1"]); this.aTask(this.myMap.get("key1")); }}如何在函数 someWork() 中正确访问 Map<string, string>() ?第一个访问者的错误:this.aTask(this.myMap["key1"]);元素隐式具有“任何”类型,因为类型“Map<string, Map<string, string>>”没有索引签名。你的意思是叫'get'吗?第二个访问器的错误:this.aTask(this.myMap.get("key1"));'Map<string, string> | 类型的参数 undefined' 不可分配给 'Map<string, string>' 类型的参数。类型“undefined”不可分配给类型“Map<string, string>”。
1 回答
守候你守候我
TA贡献1802条经验 获得超10个赞
地图,尽管是对象,但不会将它们的值放在地图实例的属性上,这就是为什么this.myMap["key1"]不起作用的原因。
TypeScript 不允许你这样做
this.aTask(this.myMap.get("key1"));
因为.get不保证 key 存在于 Map 中;它警告您它可能已经返回undefined。为了类型安全,请执行以下操作:
async someWork() {
const val = this.myMap.get("key1");
if (val) {
this.aTask(val);
}
}
添加回答
举报
0/150
提交
取消