Typescript / ECMAScript 中的地图地图

这是我个人认为在各种语言中都是正确的,但在这里不是。我一定是对 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>”。


胡说叔叔
浏览 116回答 1
1回答

守候你守候我

地图,尽管是对象,但不会将它们的值放在地图实例的属性上,这就是为什么this.myMap["key1"]不起作用的原因。TypeScript 不允许你这样做this.aTask(this.myMap.get("key1"));因为.get不保证 key 存在于 Map 中;它警告您它可能已经返回undefined。为了类型安全,请执行以下操作:async someWork() {&nbsp; &nbsp; const val = this.myMap.get("key1");&nbsp; &nbsp; if (val) {&nbsp; &nbsp; &nbsp; &nbsp; this.aTask(val);&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript