2016-07-29 58 views
1

我是新来的TypeScript,并且试图将我当前的JavaScript转换为TypeScript。在对象中导入

在JS我有这样的结构:

var roles = { 
    x: require('role.x'), 
    y: require('role.y') 
}; 

随着后来遍历这些角色像这样的目的:

for (var index in roles) { 
    var role = new roles[index]; 
    if (someObject.role == role.role) { 
    role.run(someObject); 
    } 
} 

在打字稿但是,似乎我无法做到这样的:

let roles = { 
    x: import X from "./roles/x" 
} 

其中产量

Error:(11, 14) TS1109: Expression expected. 
Error:(11, 21) TS1005: ':' expected. 
Error:(11, 31) TS1005: ',' expected. 
Error:(11, 36) TS1005: ':' expected. 

那么TypeScript的等价物是如何实现相同的-或者的另一种更清晰的/ TypeScript方法?

回答

1

这不是关于TypeScript,而是关于ES6。进口是静态的,它们不能动态使用:

import * as x from "./roles/x"; 
import * as y from "./roles/y"; 
let roles = { 
    x: x, 
    y: y 
}; 

请参阅a good introduction to ES6 modules here。在“静态与动态”部分:

对于一种动态语言,JavaScript已经成为一个令人惊讶的静态模块系统。

  • importexport所有的味道只在一个模块中的顶层允许的。没有条件导入或导出,并且不能在函数范围中使用导入。

  • 所有导出的标识符必须在源代码中按名称显式导出。您无法以编程方式遍历数组,并以数据驱动的方式导出一堆名称。

+0

虽然这两个答案都是正确的,但我会接受这个ES6模块入门和权威的'',你不能在函数范围内使用导入。“谢谢! –

+0

没问题,再加上他首先回答:) – AlexG

2

ES6进口必须在你的模块的顶层找到,否则这是一个语法错误。

import * as x from "./roles/x"; 
import * as y from "./roles/y"; 

let roles = {x, y};