Sie können so etwas machen:
// Map-Methode
function mapJSONtoObj(json: any, arg: Type): Type {
Object.keys(json).forEach((elem:string)=>{
let iterable:any = arg;
let markerType = 0
// Wir müssen um den Umstand herum arbeiten, dass null und Array beide Objekte sind
markerType |= typeof(json[elem]) == 'object'?1:0
markerType |= Array.isArray(json[elem])?2:0
markerType |= json[elem]==null?4:0
switch(markerType)
{
case 1:
mapJSONtoObj(json[elem], iterable[elem])
break;
default:
iterable[elem] = json[elem];
}
})
return arg;
}
// Verwendungsbeispiel
class Internal {
internVar: number = 0
}
class InternalArr {
internArrVar: number = 0
}
class Root {
rNum: number = 0
internArrOfObj: InternalArr[] = []
internObj: Internal = new Internal()
}
let json = {
rNum:1,
internArrOfObj: [{
internArrVar: 2
}],
internObj: {
internVar:3
}
}
let at = new Root()
let to = mapJSONtoObj(json, at);
Und natürlich können Sie die Mapping-Klassen in Schnittstellen umschreiben und sie wie folgt verwenden:
let at = new Object as Root // wenn Root eine Schnittstelle ist
// Und schließlich müssen wir in "case 1" die Bedingung berücksichtigen, dass das Objekt undefiniert ist
// Ihre mapJSONtoObj Funktion
...
switch(markerType)
{
case 1:
iterable[elem] = {} // <---- fügen Sie diesen hinzu
mapJSONtoObj(json[elem], iterable[elem])
break;
default:
iterable[elem] = json[elem];
}
...