Setters & Getters "Mapping" 另一个 属性 使用 Angular 的 HttpClient 返回未定义

Setters & Getters "Mapping" Another Property Returning Undefined Using Angular's HttpClient

我遇到了一些关于 setter 和 getter 的奇怪行为,当从 Angular 的(v5 ) HttpClient.

以下是重要的结构:

export interface NamedEntity {
    id: number;
    name: string;
    priority?: number;
}

export Rule implements NamedEntity {
      ruleId: number;
      ruleName: string;
      //..other properties

      get id(): number {
          return this.ruleId;
      }
      set id(id: number){
           this.ruleId = id;
      }
      get name(): string {
          return this.ruleName;
      }
      set name(name: string){
           this.ruleName = name;
      }
}

//Another class that implements NamedEntity in the same way

我正在使用 HttpClient 检索 Rule 个对象:

 return http.get<Rule[]>("my url");

当订阅 Observable<Rule> 时,我发现所有 getters/setters 以外的属性在我的调试器和 angular 模板中显示都没有问题。但是,基于 setter/getter 的属性在调试器中始终显示为未定义,而在我的 angular 模板中显示为空白。

我的 angular 项目是使用 Angular-CLI 设置的,我的 tsconfig.json 的目标设置为 "es5"。

这很可能是因为 HttpClient 将数据转换为由 TypeScript 生成的 Rule 接口的形状。我如何让 HttpClient 调用的结果对象成为具体 Rule class 的实例而不是隐式接口?

我需要查看更多代码才能确定...但我猜您希望您的 http 请求 return 是一个 Rule 对象。它不是。相反,它 return 将其数据与 Rule 对象定义的属性一起使用。这意味着它没有任何对象的 getter、setter 或方法。

如果您的对象是普通平面(没有层次结构),您可以这样做:

x = Object.assign(new Rule(), rule);

其中 rule 是从 Http 调用返回的值。

此代码创建一个新的 Rule 对象(然后具有 getter、setter 和方法)并将数据复制到其中。