导入对象?

时间:2016-04-19 05:02:57

标签: ecmascript-6

让我们从一个例子开始:

import renewCreepLife from '../tasks/renew_creep_life';
import harvestEnergy from '../tasks/harvest_energy';
import pickupEnergy from '../tasks/pickup_energy';
import storeEnergy from '../tasks/store_energy';
import upgradeController from '../tasks/upgrade_controller';

const taskFuncs = {
    [Tasks.RENEW]: renewCreepLife,
    [Tasks.PICKUP_ENERGY]: pickupEnergy,
    [Tasks.HARVESTING]: harvestEnergy,
    [Tasks.STORING]: storeEnergy,
    [Tasks.UPGRADING]: upgradeController,
};

有没有办法简化这个,这样我就不会创建这些毫无意义的临时变量名?类似的东西:

// incorrect but desired syntax
const taskFuncs = {
    [Tasks.RENEW]: import '../tasks/renew_creep_life',
};

N.B。每个文件都使用export default function()

1 个答案:

答案 0 :(得分:10)

没有。 import语句没有返回值,因此它永远不能用于直接赋值给那样的变量。

此外,importexport必须在顶级声明。

这对ES6来说是不可能的,并且可能在可预见的未来(ES2016 +)保持这种状态。

但是,正在处理HTML Module Loader spec,您可以加载以下模块:

System.import('../tasks/renew_creep_life')
.then(renewCreepLife => {

});

但是因为它是基于承诺的,所以你仍然无法在这样的对象中内联编写它。

如果您想要同步加载,NodeJS'require可能是您最接近的。有浏览器实现,如Webpack / Browserify /等。试图模仿行为:

const taskFuncs = {
    [Tasks.RENEW]: require('../tasks/renew_creep_life').default
};