【问题标题】:Transform an http.get response json instance of Typescript Model转换 Typescript 模型的 http.get 响应 json 实例
【发布时间】:2019-09-15 10:46:55
【问题描述】:

我还没有找到关于这个问题的可靠答案:
如何将我的 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 ,但这似乎也不起作用。

【问题讨论】:

  • 我的偏好是坚持使用接口来定义从 api 调用返回的结构,而不是使用具体的类。如果有我想直接与之关联的行为,我只会为模型创建一个新的类实例,这很少见。这减少了代码量,您的 api 调用只是 return this.http.get&lt;IMyClass&gt;(url);

标签: angular typescript inheritance angular7 http-get


【解决方案1】:

我试图弄清楚如何在不利用完整构造函数的情况下做到这一点,

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

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

我的想法

个人I prefer to keep with manual assignments,它的代码更多,但可以避免魔法 错误。

【讨论】:

  • 我曾经在一个团队中,通过处理响应来即时完成这项工作,但那是不久前的事了,我不记得它是如何完成的。
【解决方案2】:

您可以在构造函数中对所有内容进行短代码:

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

export class MyClass implements IMyClass {

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

    }
}

你不需要 public 和 private ,只需要在构造函数中 public。

我猜构造函数中的; 是你粘贴的错误。

【讨论】:

  • 谢谢,是的,我在分号中粘贴了。这是一个很好的提示,但我不确定它是否有助于解决我当前的问题。
  • 那么您目前的问题是什么?您必须在某个地方声明您的类使用什么,或者改为使用接口。你可以用接口做你想做的事,而不用再输入任何东西。
猜你喜欢
  • 1970-01-01
  • 2014-09-04
  • 2012-07-14
  • 2019-11-15
  • 2020-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多