angular - Typescript: Konvertera JSON-objekt till ett klass-/gränssnittobjekt


Jag försöker konvertera ett API-svar till en TypeScript-klass/gränssnitt.

Här returnerar API:et en lista med objekt med vissa egenskaper, men jag behöver bara några av egenskaperna hos svarobjektet.

Exempel på API-svar:

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

Typescript-klass


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

Kan du vänligen föreslå för mig vad som skulle vara det bästa tillvägagångssättet för att konvertera JSON-objektet till ett TypeScript-objekt.

Svar #1

Jag skulle föreslå att skapa ett gränssnitt som beskriver de egenskaper du använder i din app och ignorera resten:

Så om vi antar att ditt svar ser ut så här:

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

och du är bara intresserad av Id och Name, skapa bara ett gränssnitt så här:

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

då kan du i resten av din app casta svaret till IMyObject[]

Till exempel om en funktion använder ditt svar:

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

eller om du behöver returnera den typen, kan du göra en direkt typomvandling på detta sätt:

return response as MyObject[];

REDIGERA: Som nämnts i kommentaren nedan, tar det inte bort de extra egenskaper som du inte är intresserad av att bara konvertera ditt objekt till IMyObject.

För att göra det, använd .map:

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

Svar #2

Du kan använda forEach-metoden och skapa ett nytt objekt med de egenskaper du behöver.

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);

ARBETANDE DEMO

Relaterade artiklar