javascript - Mappa JSON-objekt till TypeScript-objekt


Jag returnerar en array av objekt från servern med AJAX JQuery, ett exempel

[{"Name":"Name1","ResultSet":[{"Id": 1,"Name":"Name1"}, {"Id": 2,"Name":"Name2"}]},{"Name": "Name11", "ResultSet": [{"Id": 11, "Name": "Name11"}, {"Id": 22, "Name": "Name22"}]}]

Dessutom har jag följande TypeScript-objekt som jag vill mappa

interface IResult {
   name: string;
   resultSet: any;
}

export class Result implements IResult {
    constructor(public name: string, public resultSet: any) { }
}

Sättet jag bearbetar resultaten på,

dataService.execute(function (results) {
    $(results).each(function (index, element) {
        console.log(element.Name);
            $.each(element.ResultSet, function (key, value) {
                $.each(value, function (key, value) {
                    console.log(key + ' - ' + value);
                });
            });
        });
    });

Inne i VS 2013 klagar kompilatorn på att:

The property 'Name' does not exist on value of type 'Element'.

Finns det ett sätt att kartlägga den returnerade samlingen av objekt till en array av TS Result-objekt?

Tack

UPPDATERING Jag slutade med att loopa på följande sätt:

var result = <Array<IResult>>results;

$.each(result, function (index, item) {
      // item is Result instance
      // item.name
      console.log(item.name);

      // item.resulSet
      $.each(item.resultSet, function (key, val) {
            // val is single Object (one result)
            $.each(val, function (k, v) {
                  // k,v => key/value for each property on result
                    console.log(k + ' - ' + v);
            });
      });

});

Svar #1

I din gränssnittsdefinition för IResult är egenskaperna med små bokstäver, men du försöker komma åt dem med stora bokstäver. Eftersom ditt JSON har stora bokstäver, ändra IResult till:

interface IResult {
   Name: string;
   ResultSet: any;
}