将映射响应映射到typescript/angular中的映射
在angular4上工作了一段时间,今天我遇到了一个场景,在这个场景中,我的服务返回给我一个映射,而不是JSON响应。我如何使用我的地图映射该服务。visual studio将映射响应映射到typescript/angular中的映射,angular,typescript,Angular,Typescript,在angular4上工作了一段时间,今天我遇到了一个场景,在这个场景中,我的服务返回给我一个映射,而不是JSON响应。我如何使用我的地图映射该服务。visual studio中出现的错误类型信息无法分配给类型映射。我的代码如下:请告诉我我是否制作了正确的模型类?如何将服务映射响应映射到我的映射 服务的响应 { "1":{ "id":"1", "name":"Anna" }, "2":{ "id":"2", "name":"Martin" }
中出现的错误类型信息无法分配给类型映射。我的代码如下:请告诉我我是否制作了正确的模型类?如何将服务映射响应映射到我的映射
服务的响应
{
"1":{
"id":"1",
"name":"Anna"
},
"2":{
"id":"2",
"name":"Martin"
}
}
ts文件
myMap: Map<string, Info>;
this.groupService.fetchInfo().subscribe(data => {
this.myMap= data; // Error in visual studio: Type Info cannot be
// assigned to type Map<string, Info>
});
服务
fetchInfo(): Observable<Info>{
const url = "/info/getInfo";
return this.httpClient.get<Info>(url);
}
fetchInfo():可观察{
const url=“/info/getInfo”;
返回此.httpClient.get(url);
}
响应仍然是JSON,只是JSON是一个将字符串映射到Info
类型的对象。因此它可以定义为{[key:string]:Info}
。因此,您的服务需要定义为:
fetchInfo(): Observable<{ [key: string]: Info }>
fetchInfo():可观察
或者,如果您想要一个真正的JavaScript映射(而不是对象),服务需要显式地将对象转换为映射。整个过程应该是这样的(我没有机会检查语法):
fetchInfo():可观察{
返回此.httpClient.get(url).map(响应=>{
常量映射=新映射();
Object.keys(response.forEach(key=>{
map.set(key,response[key]);
});
返回图;
});
}
响应仍然是JSON,只是JSON是一个将字符串映射到Info
类型的对象。因此它可以定义为{[key:string]:Info}
。因此,您的服务需要定义为:
fetchInfo(): Observable<{ [key: string]: Info }>
fetchInfo():可观察
或者,如果您想要一个真正的JavaScript映射(而不是对象),服务需要显式地将对象转换为映射。整个过程应该是这样的(我没有机会检查语法):
fetchInfo():可观察{
返回此.httpClient.get(url).map(响应=>{
常量映射=新映射();
Object.keys(response.forEach(key=>{
map.set(key,response[key]);
});
返回图;
});
}
您能否将您的服务退货类型从
更改为
?请尝试此myMap:Info您能否将您的服务退货类型从
更改为
?请尝试此myMap:Info
fetchInfo(): Observable<Map<string, Info>> {
return this.httpClient.get<{ [key: string]: Info }>(url).map(response => {
const map = new Map();
Object.keys(response).forEach(key => {
map.set(key, response[key]);
});
return map;
});
}