我有模型User
:
export class User {
id: number;
roles: Role[];
hasRole(role: string) { return true; }
}
在我的用户服务中,我使用泛型将响应映射到该模型。
getById(id: number) {
return this.http.get<User>(`/api/v1/admin/users/${id}`);
}
然后在组件中,我尝试调用hasRole
方法:
ngOnInit() {
this.userService.getById(1).subscribe(data => this.user = data);
}
checkRole() {
return this.user.hasRole();
}
致电checkRole
后,我收到消息:
TypeError:this.user.hasRole不是函数。
我该如何解决?
答案 0 :(得分:1)
当您将类型参数传递给get
时,实际上并没有更改get
内部所做的事情,即从服务器获取数据并将其解析为对象(使用{{1 }} 最有可能的)。传递参数的原因是要为将来自服务器的对象进行键入,但是该对象实际上不是类的实例,而是仍然是简单的对象。为避免这种混淆,您可以使用仅包含字段作为类型参数的接口,并在JSON.parse
User
的实例
subscribe
或更安全的一种类型安全的方法,可以确保没有人认为从this.userService.getById(1).subscribe(data => this.user = Object.assign(new User(), data));
返回的数据是getById
的实际实例:
User