我有一个服务器,它有一个路由(例如/ 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运算符?
我想知道是否有其他方法可以手动循环每个字段,创建一个用户实例将其推送到'结果'数组。
由于
答案 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
类实例的数组。