为了账号安全,请及时绑定邮箱和手机立即绑定

Typescript / ECMAScript 中的地图地图

Typescript / ECMAScript 中的地图地图

胡说叔叔 2023-05-25 17:13:26
这是我个人认为在各种语言中都是正确的,但在这里不是。我一定是对 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);

    }

}



查看完整回答
反对 回复 2023-05-25
  • 1 回答
  • 0 关注
  • 115 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信