Angular 2(typescript)将Json转换为Object []

时间:2017-07-17 13:18:34

标签: angular typescript casting

我有一个服务器,它有一个路由(例如/ users),它将用户的列表作为json返回。我希望在我的typeScript中将响应json转换为我的用户模型数组。

现在我有这样的事情:

user.service.ts:

searchUser() : void {
    return this.http.get('http://127.0.0.1:3000/users/' + this.serializeUrlParam({}))
                    .toPromise()
                    .then(response => response.json() as User[])
                    .catch();
}

我的user.ts:

export class User {
    infos: Object;
}

我在哪里使用我的服务:

service.searchUser().then(userList=> {
        console.dir(userList)
});

当我显示response.json()的返回值时,我有这个对象:

{
    users: [
        { 
            Data : {
                ID : 1,
                Name : "foo",
                ....
            }
        },
        ....
    ]
}

当我显示最终数据(应该是和用户数组)时,我有完全相同的对象。

有没有办法为response.json()返回的'users'数组的每个条目创建as运算符创建和User实例,并复制'infos'中的所有数据(Id,name等) “用户”模型的字段?比方说,如果可能的话,覆盖我的用户模型上的as运算符?

我想知道是否有其他方法可以手动循环每个字段,创建一个用户实例将其推送到'结果'数组。

由于

1 个答案:

答案 0 :(得分:3)

我同意评论,你可以很好地使用界面,事实上我很可能会自己做,即使Angular风格指南建议使用类:https://angular.io/guide/styleguide#interfaces

这是您的类的解决方案(没有构造函数)。我要做的是实际上想要从你的回复中删除Data属性并最终得到这样的类:

export class User {
  ID: number;
  Name: string;
  ....
}

以下是如何制作上述类的对象,我们首先映射数组,然后从User对象创建Data类的实例:

searchUser() : void {
  return this.http.get('http://127.0.0.1:3000/users/' + this.serializeUrlParam({}))
    .toPromise()
    .then(response => response.json().users.map(user =>
        Object.assign(new User(), user.Data)))
    .catch();
}

现在我们最终得到一个包含上述User类实例的数组。