Преобразуйте http.get-ответ json-экземпляр модели Typescript. - PullRequest
0 голосов
/ 26 апреля 2019

Я не нашел надежного ответа на этот вопрос:
Как мне преобразовать мой ответ 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 ]

1 голос
/ 26 апреля 2019

Я пытаюсь понять, как это сделать, не используя полный конструктор,

Вы ищете библиотеку десериализации (также называемую гидратацией).

Я могу порекомендовать https://github.com/mobxjs/serializr, поскольку он поддерживает TypeScript ?

Мои мысли

Лично Я предпочитаю придерживаться ручных заданий , это больше кода, но спасает вас от магических ошибок.

0 голосов
/ 26 апреля 2019

Вы можете кратко закодировать все в конструкторе:

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

export class MyClass implements IMyClass {

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

    }
}

Вам не нужны публичные и приватные, просто публичные в конструкторе.

Я думаю, ;в конструкторе это то, что вы вставили неправильно.

...