javascript - 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>'。
解决方案
Maps,尽管是对象,但不会将它们的值放在 Map 实例的属性中,这就是为什么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);
}
}
推荐阅读
- machine-learning - SRGAN 模型不学习
- javascript - .map() 函数更新先前的变量
- linux - Linux:如何使用 Apache 用户进行 SSH 连接?
- reactjs - 如何使用 React.js 在 botframework 网络聊天中创建自定义卡片(如自适应卡片)?
- json - 如何将数据文件(xml、json、yaml)转换为可执行的 C 文件?
- python - 组的名称是什么?在 odoo 10
- spring-boot - 从 microsoft adal + spring boot 与 azure Active Directory 集成中获取组和角色信息
- ios - 如何使代码更简单,更可重用swiftui中具有多维字典的导航链接?
- go - 从类型 []primitive.M Go 中读取数据
- python - Python 正则表达式 - 查找不同行上两个特定单词之间的所有单词