Angular 通过角度';获取对象时,属性未定义;https客户端

Angular 通过角度';获取对象时,属性未定义;https客户端,angular,typescript,properties,Angular,Typescript,Properties,我有一个服务类,它使用Angular的HttpClient从web服务获取数据。 web服务返回一个JSON对象,如下所示: { "id": "some kind of user id", "name": "The user's name", "permissions": [ "String array with different permission names" ] } this.http.get<DomainUser>(this.apiUrl +

我有一个服务类,它使用Angular的
HttpClient
从web服务获取数据。 web服务返回一个JSON对象,如下所示:

{
  "id": "some kind of user id",
  "name": "The user's name",
  "permissions": [ 
    "String array with different permission names"
  ]
}
this.http.get<DomainUser>(this.apiUrl + '/Users/Self')
  .map(next => Object.assign(new DomainUser(), next))
  .subscribe(next => {
      console.info('User: "%s" (Admin: %s)', next.name, next.isAdmin ? 'yes' : 'no');

    // ...
  },
  error => {
    // error handling
  }
);
我希望
HttpClient
get
方法将这些对象键入为我自己的
DomainUser
类对象

这是
DomainUser
类:

export class DomainUser {
  public id: string;
  public name: string;
  public permissions: string[];

  public get isAdmin(): boolean {
    return this.permissions.includes('admin permission's name');
  }
}
当我想获取
DomainUser
isAdmin
属性的值时,我得到一条消息,
isAdmin
未定义。 如何将用户数据正确键入为
DomainUser

get
调用是

this.http.get<DomainUser>(this.apiUrl + '/Users/Self').subscribe(
  next => {
    console.info('User: "%s" (Admin: %s)', next.name, next.isAdmin ? 'yes' : 'no');

    // ...
  },
  error => {
    // error handling
  }
);
this.http.get(this.apirl+'/Users/Self')。订阅(
下一步=>{
console.info('User:'%s'(管理员:%s)',next.name,next.isAdmin?'yes':'no');
// ...
},
错误=>{
//错误处理
}
);

您正在将文本解析为新对象,而不是新域用户。无法分析方法,因此该方法不存在。你可以这样做:

{
  "id": "some kind of user id",
  "name": "The user's name",
  "permissions": [ 
    "String array with different permission names"
  ]
}
this.http.get<DomainUser>(this.apiUrl + '/Users/Self')
  .map(next => Object.assign(new DomainUser(), next))
  .subscribe(next => {
      console.info('User: "%s" (Admin: %s)', next.name, next.isAdmin ? 'yes' : 'no');

    // ...
  },
  error => {
    // error handling
  }
);
this.http.get(this.apirl+'/Users/Self')
.map(next=>Object.assign(newdomainuser(),next))
.订阅(下一步=>{
console.info('User:'%s'(管理员:%s)',next.name,next.isAdmin?'yes':'no');
// ...
},
错误=>{
//错误处理
}
);

你好,罗宾,谢谢你的回答。现在我得到以下消息:
TypeError:_this.http.get(…).map不是一个函数
我还从“rxjs/operators”添加了
import{map}并获得相同的消息。
导入'rxjs/operators/add/map'在修改路径后(
导入'rxjs/add/operator/map';
)它可以工作。谢谢!:)