我正在尝试将GET请求的响应映射到实体类。 在该响应对象上调用函数时,将引发错误:
TypeError:res.foo不是函数
获取请求:
this.http.get<TodoEntity>('https://jsonplaceholder.typicode.com/todos/1').subscribe((res) => {
console.log(res.foo());
})
实体类:
export class TodoEntity {
public userId: number;
public id: number;
public title: string;
public completed: boolean;
public foo(): string {
return 'Hello world';
}
}
是否可以将响应直接映射到实体类并在其上调用函数?还是我必须基于响应对象手动创建 TodoEntity 的新实例?
我正在使用带角度7.3.6的打字稿3.1.6。
答案 0 :(得分:3)
您需要创建该类的实例。当您将JSON转换为原型JavaScript / TypeScript类时,这些方法不可用。
编辑: 刚刚在这里找到了很好的解释: https://stackoverflow.com/a/22875957/894532
答案 1 :(得分:1)
您可以使用RxJS的map
运算符,使用Object.assign
根据网络服务返回的属性集来构建TodoEntity
实例:
this.http.get('https://jsonplaceholder.typicode.com/todos/1').pipe(
map(res => Object.assign(new TodoEntity(), res))
).subscribe((res: TodoEntity) => {
console.log(res.foo());
});