2016-05-14 11 views
1

Ich versuche, die Map-Funktion zu verwenden, um den Eigenschaftstyp zu transformieren.TypeScript-Map-Funktion zum Ändern des Eigenschaftstyps

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

Das wird über Code zurück var2

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

Was muss ich

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

ist Wie kann ich dieses Ziel erreichen?

Antwort

2

Sie versuchen, einen Klassennamen (als String) der tatsächlichen Klasse zuzuordnen.
Sie können nur ein Mapping-Objekt wie so halten:

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

Code in playground

+0

lief ich den Code und es ergab das erwartete Ergebnis. Überprüfen Sie den Link zu Spielplatz in meiner Antwort (gerade hinzugefügt) –

+0

Wenn Klasse A und B in der gleichen Datei definiert ist, funktioniert es wie erwartet. Wenn es sich jedoch um eine importierte Klasse handelt, die Import {A, B} von ... verwendet, wurde die Komponenteneigenschaft undefiniert angezeigt. Warum ist das so? – Shawn

+0

Sind Sie sicher, dass die Klassen geladen wurden? Wenn du 'console.log (A, B)' nach dem 'import' machst, was bekommst du? –

Verwandte Themen