2016-05-14 45 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)',你会得到什么? –