塞特斯& Getters“映射”使用Angular的HttpClient返回未定义的另一个属性

时间:2018-01-26 21:23:25

标签: angular typescript getter-setter angular-httpclient

我遇到了一些关于setter& amp;的奇怪行为。从Angular(v5)HttpClient检索时,在TypeScript中设置/返回对象的另一个公共属性的getter。

以下是重要的结构:

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

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

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

订阅Observable<Rule>时,我发现所有不是getter / setter的属性在我的调试器和角度模板中都没有问题。但是,基于setter / getter的属性始终在调试器中显示为undefined,在我的角度模板上显示为空白。

我的角度项目是使用Angular-CLI设置的,我的tsconfig.json的目标设置为“es5”。

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

1 个答案:

答案 0 :(得分:4)

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

如果您的对象是普通的(没有层次结构),您可以执行以下操作:

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

其中rule是来自Http调用的值。

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