2017-07-13 55 views
2

我目前正在使用node-slack-sdk來構建Slack的機器人。在他們的例子,他們得到了以下行:使用解構與導入

var CLIENT_EVENTS = require('@slack/client').CLIENT_EVENTS; 

CLIENT_EVENTS然後使用如下:

rtm.on(CLIENT_EVENTS.RTM.AUTHENTICATED, function handleRTMAuthenticated() { 
    console.log('RTM client authenticated!'); 
}); 

我爲了使用解構直接獲得CLIENT_EVENTS.RTM對象改變了require我改名爲RTM_CLIENT_EVENTS。現在

const { 
    CLIENT_EVENTS: { RTM: RTM_CLIENT_EVENTS }, 
} = require('@slack/client'); 

,我想改變requireimport

import { 
    CLIENT_EVENTS: { RTM: RTM_CLIENT_EVENTS }, 
} from '@slack/client'; 

但我得到了以下錯誤:

ES2015 named imports do not destructure. Use another statement for destructuring after the import

任何想法,爲什麼他們不解構?

回答

4

importstrict syntax只模仿淺層解構語法,但應該是靜態分析。 export也是如此,它模仿對象字面值的語法。

由於錯誤提示,要做到這一點,正確的方法是

import { CLIENT_EVENTS } from '@slack/client'; 

const { RTM: RTM_CLIENT_EVENTS } = CLIENT_EVENTS; 
+0

我不知道這種事的!謝謝:) – Erazihel

+1

不客氣。嚴格的語法允許IDE和linters準確計算出模塊的導入和導出,這對於鬆散的CommonJS模塊來說是不可能的。 – estus