TypeScript map-funktion för att ändra egenskapstyp


Jag försöker använda map-funktionen för att transformera egendomstypen.

class A {... }
class B {... }

var var1 = [{path:"aa",comp:"A"},{path:"b",comp:"B"}];
var var2 = var1.map(function(obj){ 
   var rObj = {path: obj.path, component: A};
   return rObj;
});

Ovanstående kod kommer att returnera till var2

[{path:"aa",comp:A},{path:"b",comp:A}]

Det jag behöver är

[{path:"aa",comp:A},{path:"b",comp:B}]

Hur kan jag uppnå detta syfte?

Svar #1

Du försöker kartlägga mellan ett klassnamn (som sträng) till den faktiska klassen.
Du kan helt enkelt underhålla ett mappningsobjekt så här:

class A { ... }
class B { ... }

var nameToClassMapping = {
    A: A,
    B: B
};

var var1 = [{ path: "aa", comp: "A" }, { path: "b", comp: "B" }];
var var2 = var1.map(function(obj) { 
    var rObj = { path: obj.path, component: nameToClassMapping[obj.comp] };
    return rObj;
});

Kod i lekplats