转换Typescript模型的http.get响应json实例

时间:2019-04-25 23:20:49

标签: angular typescript inheritance angular7 http-get

我在这个问题上没有找到可靠的答案:
如何将JSON响应从HTTP.get请求转换为Typescript对象的实例?

设置舞台:

CLASS =====================
export interface IMyClass {
  myClassId: number;
  myClassName: string;
  myClassDescription: string;
}

export class MyClass implements IMyClass {
  public myClassId: number;
  public myClassName: string;
  public myClassDescription: string;

  constructor(
    myClassId: number;
    myClassName: string;
    myClassDescription: string;
  ) {
    this.myClassId = myClassId
    this.myClassName = myClassName
    this.myClassDescription = myClassName    
  }
}


SERVICE===============
  public getMyClassById(id: number): Observable<MyClass> {
    return this.http.get<MyClass>(`${this.apiEndpoint}/myClassId?myClassID=${id}`)
  }

我试图弄清楚如何在不利用完整构造函数的情况下执行此操作,因为我的真实模型具有大约12个属性。我试过pipe =>将响应映射为MyClass,这似乎也不起作用。

2 个答案:

答案 0 :(得分:1)

  

我试图弄清楚如何在不利用整个构造函数的情况下完成此操作,

您正在寻找反序列化(也称为水合)库。

我推荐的是https://github.com/mobxjs/serializr,因为它支持TypeScript

我的想法

个人I prefer to keep with manual assignments,其更多代码,但可避免您陷入魔术错误。

答案 1 :(得分:0)

您可以对构造函数中的所有内容进行简短编码:

export interface IMyClass {
    myClassId: number;
    myClassName: string;
    myClassDescription: string;
}

export class MyClass implements IMyClass {

    constructor(
        public myClassId: number,
        public myClassName: string,
        public myClassDescription: string
    ) {

    }
}

您不需要公共和私有的,只需在构造函数中是公共的。

我想构造器中的;是您粘贴错误的东西。