从打字稿中的地图检索值时,map.get 不是函数

Posted

技术标签:

【中文标题】从打字稿中的地图检索值时,map.get 不是函数【英文标题】:map.get is not a function while retrieving a value from a map in typescript 【发布时间】:2021-05-09 01:40:52 【问题描述】:

我有一个键和值作为字符串的映射。但是,当尝试根据键检索值时,它会抛出错误。

以下是我的代码sn-p。

let map:Map<string, string> =    [ "key1": "hello world 1" ], ["key2": "hello world 2"]  ;
alert( JSON.stringify(map.get("key"))  );

我得到的异常如下。

VM133:4 Uncaught TypeError: map.get is not a function
    at eval (eval at exec (typescript.js:41), <anonymous>:4:26)
    at exec (typescript.js:41)
    at htmlDocument.runScripts (typescript.js:41)

感谢您能告诉我我做错了什么

谢谢

【问题讨论】:

这不是正确的 JSON。你想要这个,我猜,let map: Record&lt;string, string&gt; = key1: "hello world 1", key2: "hello world 2" ; 什么是记录? 实用类型typescriptlang.org/docs/handbook/… 我仍然遇到同样的错误 alert( JSON.stringify(Object.keys(map))); 【参考方案1】:

Map 不是原语,需要使用构造函数调用(我认为 Typescript 应该对此发出警告)。

见MDN documentation for Map

您可能正在寻找这个:

const map:Map<string, string> = new Map([
  [ "key1", "hello world 1" ], 
  [ "key2", "hello world 2" ],
])

【讨论】:

这不会编译。 [ "key1": "hello world 1" ] 是无效的元组/数组。 @Nishant 谢谢,正在解决这个问题。我的错,复制/粘贴太快了【参考方案2】:

我认为您应该在打字稿中创建这样的地图,您缺少构造函数调用。你现在所拥有的只是一个对象字面量,它的格式也是错误的。

let myMap = new Map([
        ["key1", "value1"],
        ["key2", "value2"]
    ]);
alert( JSON.stringify(map.get("key1"))  );

【讨论】:

我能问一个简单的问题吗?我如何将 [["key1", "value1"], ["key2", "value2"] ] 声明为类型化变量。是 let arr:[ [string,string] ] ,这是正确的吗? 嗯,我认为您必须像这样定义您的地图界面,interface myMap // whatever your key and values 我找到了这个答案***.com/questions/40976536/…,你可以看看它是否符合你的目的

以上是关于从打字稿中的地图检索值时,map.get 不是函数的主要内容,如果未能解决你的问题,请参考以下文章

地图在打字稿中显示错误

如何在打字稿中合并或连接两个地图列表? [复制]

打字稿中的多个构造函数

打字稿中的重载函数类型

用玩笑测试打字稿中的私有函数

如何在打字稿中声明函数类型