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