2017-05-22 51 views
0

我正試圖通過字符串動態地從模塊實例化一個類。通過字符串導出參考模塊

說我有./src/main.ts./src/role/index.ts./src/role/role<n>.ts

./src/role/index.ts

export * from './role1.ts' 
export * from './role2.ts' 

和示例作用./src/role/role1.ts

export class Role1 { 
    constructor() { } 
} 

然後從我的主,我想要做的事像

import * as Roles from './role' 
function load_role(to_load: string) { 
    for(let role in Roles) { 
     if(role == to_load) // e.g. Role1 
      return Roles[role]() 
    } 
} 

避免的笨拙如:

import * as Roles from './role' 
function load_role(to_load: string) { 
    if(to_load == 'Role1') 
     return Roles.Role1() 
    else if(to_load == 'Role<n>') 
     return Roles.Role<n>() 
} 

但我不能串引用角色模塊,這可能嗎?

+0

能你分享了roleN.ts的內容 –

回答

1

你也許可以做到最接近的事是爲string literals聯合類型to_load

function load_role(to_load: "Role1" | "Role2") { 
    for(let role in Roles) { 
     if (role == to_load) // e.g. Role1 
      return Roles[to_load](); 
    } 
} 

或者如果你是OK失去靜態類型,然後將其轉換爲any

function load_role(to_load: string) { 
    if ((Roles as any)[to_load]) { 
     (Roles as any)[to_load](); 
    } 
} 
0

但我不能通過字符串引用角色模塊,這可能嗎?

號ES6模塊用於靜態安全,你是不是允許使用索引到模塊。