2016-05-14 30 views
1

我想使用地圖功能來改變屬性類型。TypeScript地圖功能改變屬性類型

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

上面的代碼將返回VAR2

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

我需要的是

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

我怎樣才能達到這個目的呢?

回答

2

您試圖將類名(字符串)映射到實際的類。
你可以只保持像這樣一個映射對象:

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

我跑的代碼,並返回預期的結果。在我的答案中檢查操場的鏈接(只是添加了它) –

+0

如果A類和B類在同一個文件中定義,它按預期工作。但是,如果類是使用import {A,B}從...導入的類,那麼組件屬性顯示爲未定義。爲什麼如此? – Shawn

+0

你確定這些類是被加載的嗎?如果你在'import'之後執行'console.log(A,B)',你會得到什麼? –