使用解密与导入

Era*_*hel 2 javascript ecmascript-6

我正在构建一个Slack使用该机器人的机器人node-slack-sdk.在他们的例子中,他们得到以下行:

var CLIENT_EVENTS = require('@slack/client').CLIENT_EVENTS;
Run Code Online (Sandbox Code Playgroud)

该CLIENT_EVENTS则使用如下:

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

我已经改变了require以便使用解构来直接获取CLIENT_EVENTS.RTM我重命名的对象RTM_CLIENT_EVENTS.

const {
  CLIENT_EVENTS: { RTM: RTM_CLIENT_EVENTS },
} = require('@slack/client');
Run Code Online (Sandbox Code Playgroud)

现在,我想改变require到import:

import {
  CLIENT_EVENTS: { RTM: RTM_CLIENT_EVENTS },
}  from '@slack/client';
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

ES2015名为进口不进行破坏.导入后使用另一个语句进行解构

知道他们为什么不去构造?

小智 13

javascript 中的语句import本身不支持解构语法。但您可以通过以下方式重命名导入:

import {RTM_CLIENT_EVENTS as RTM} from '@slack/client'
Run Code Online (Sandbox Code Playgroud)

这里RTM_CLIENT_EVENTS属性将被导入并重命名为RTM使用as关键字。


Est*_*ask 8

import具有严格的语法,只能模仿浅层解构语法,但应该进行静态分析.export它也是如此,它模仿了对象文字语法.

正如错误所暗示的那样,正确的方法是

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

const { RTM: RTM_CLIENT_EVENTS } = CLIENT_EVENTS;
Run Code Online (Sandbox Code Playgroud)

  • 需要注意的是,允许解构,甚至可以通过以下方式重命名:`import {exportName as newName} from 'some/lib'`。似乎不允许嵌套解构。同样重要的是要注意,您无法重命名,因为通常必须使用“as”而不是“:”。也感谢您提供严格语法的链接。 (3认同)