Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将映射响应映射到typescript/angular中的映射_Angular_Typescript - Fatal编程技术网

将映射响应映射到typescript/angular中的映射

将映射响应映射到typescript/angular中的映射,angular,typescript,Angular,Typescript,在angular4上工作了一段时间,今天我遇到了一个场景,在这个场景中,我的服务返回给我一个映射,而不是JSON响应。我如何使用我的地图映射该服务。visual studio中出现的错误类型信息无法分配给类型映射。我的代码如下:请告诉我我是否制作了正确的模型类?如何将服务映射响应映射到我的映射 服务的响应 { "1":{ "id":"1", "name":"Anna" }, "2":{ "id":"2", "name":"Martin" }

在angular4上工作了一段时间,今天我遇到了一个场景,在这个场景中,我的服务返回给我一个映射,而不是JSON响应。我如何使用我的地图映射该服务。visual studio
中出现的错误类型信息无法分配给类型映射。我的代码如下:请告诉我我是否制作了正确的模型类?如何将服务映射响应映射到我的映射

服务的响应

{
"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;
    });
}