代码之家  ›  专栏  ›  技术社区  ›  JNYRanger

Setters和getter使用Angular的HttpClient“映射”另一个返回未定义属性

  •  2
  • JNYRanger  · 技术社区  · 6 年前

    我遇到了一些关于setters的奇怪行为&从Angular(v5)检索时,在TypeScript中的对象上设置/返回另一个公共属性的getter 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
    

    我正在找回 Rule 对象使用 HttpClient 像这样的:

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

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

    我的angular项目是用angular CLI和我的tsconfig设置的。json将目标设置为“es5”。

    这很可能是因为 HttpClient 将数据强制转换为 规则 由TypeScript生成的接口。如何从 HttpClient 调用混凝土实例 规则 类而不是隐式接口?

    1 回复  |  直到 6 年前
        1
  •  4
  •   DeborahK    6 年前

    我需要查看更多代码才能确定。。。但我猜您希望您的http请求返回一个规则对象。事实并非如此。相反,它返回的数据具有规则对象定义的属性。这意味着它没有任何对象的getter、setter或方法。

    如果对象是普通平面(无层次结构),可以执行以下操作:

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

    哪里 rule 是Http调用返回的值。

    这段代码创建一个新的规则对象(然后包含getter、setter和方法)并将数据复制到其中。