Typescript: преобразование объекта JSON в объект класса / интерфейса - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь преобразовать ответ API в класс / интерфейс машинописного текста.

Здесь API возвращает список объектов с некоторыми свойствами, но мне нужно только несколько свойств объекта ответа.

Пример ответа API:

    [{
    'Id' : 1,
    'Name': 'test',
    'Description: 'Test',
    'PropertyX': 'x',
    'PropertyY' : 'y'
    },
    ...]

Класс машинописи


    Class Response {
     Id: string;
     Name: string;
    }

Подскажите, пожалуйста, какой будет лучший подход для преобразования объекта JSON в объект машинописи.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Вы можете использовать forEach и создайте новый объект с требуемыми свойствами.

myarray=[];
 ngOnInit() {
     this.myvalues();

  }


    myMethod()
        {
           const response = [{
            'Id' : 1,
            'Name': 'test',
            'Description': 'Test',
            'PropertyX': 'x',
            'PropertyY' : 'y'
          }, {
            'Id' : 2,
            'Name': 'test2',
            'Description': 'Test2',
            'PropertyX': 'x2',
            'PropertyY' : 'y2'
          }
        ];

        response.forEach(value=>{
         this.myarray.push(
               {
                'ID':value.Id,
               'Name':value.Name
              }
            )
        });
        console.log(this.myarray);

РАБОЧИЙ ДЕМО

0 голосов
/ 30 апреля 2018

Я бы предложил создать интерфейс, описывающий свойства, которые вы используете в своем приложении, и игнорировать остальные:

Итак, если ваш ответ выглядит следующим образом:

const response = [{
      'Id' : 1,
      'Name': 'test',
      'Description: 'Test',
      'PropertyX': 'x',
      'PropertyY' : 'y'
    }, {
      'Id' : 2,
      'Name': 'test2',
      'Description: 'Test2',
      'PropertyX': 'x2',
      'PropertyY' : 'y2'
    }
];

и вас интересуют только Id и Name, просто создайте интерфейс, например, так:

interface IMyObject {
  Id: String;
  Name: String;
}

тогда в остальной части вашего приложения вы можете разыграть ответ на IMyObject[]

Например, если функция использует ваш ответ:

function myFunction(response: IMyObject[]) { ... }

или если вам нужно вернуть этот тип, вы можете выполнить прямое приведение типа так:

return response as MyObject[];

РЕДАКТИРОВАТЬ: Как указано в комментарии ниже, просто приведение вашего объекта к IMyObject не удаляет лишние свойства, которые вас не интересуют.

Для этого используйте .map:

const formattedResponse: IMyObject = reponse.map(item => {
  Id: item.Id,
  Name: item.Name
});
...