2016-04-19 3 views
13

のは、例を見てみましょう:私はこれらの無意味な一時的な変数名を作成していないよように、これを簡素化する方法がオブジェクトにインポートしますか?

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()

+2

ないES6、しかし、あなたはおそらくWebPACKのかbrowserifyのようなものを使用していることから、あなたはあなたにちょうどそれをすることができます 'require'を、使用することができます。 –

+0

[ES6モジュール構文(destructing)を使用してプロパティにインポートする方法?](http://stackoverflow.com/q/32124640/1048572) – Bergi

答えて

7

No.を使用しています。importステートメントは戻り値を持たないため、そのような変数に直接代入することはできません。

さらに、importおよびexportは最上位レベルで宣言する必要があります。

これは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 
}; 
+1

Btw、私の意見では、オリジナルのソリューションは明快で明快で簡潔であり、より重要なことに、静的に分析可能である。私は個人的にあなたが持っているものを保つだろう。 – CodingIntrigue

+0

それは 'require( '../ tasks/renew_creep_life')でなければならないでしょう。 – mpen

+1

@mpen本当のCommonJSはい、そうです(一部のブラウザの実装は100%準拠ではありません - 例えばBabel 5など) - 私は更新します – CodingIntrigue

関連する問題