I'm currently building a bot for Slack
using the node-slack-sdk
. In their examples they got the following line:
var CLIENT_EVENTS = require('@slack/client').CLIENT_EVENTS;
The CLIENT_EVENTS
is then used as follow:
rtm.on(CLIENT_EVENTS.RTM.AUTHENTICATED, function handleRTMAuthenticated() {
console.log('RTM client authenticated!');
});
I've changed the require
in order to use destructuring to directly get the CLIENT_EVENTS.RTM
object that I renamed RTM_CLIENT_EVENTS
.
const {
CLIENT_EVENTS: { RTM: RTM_CLIENT_EVENTS },
} = require('@slack/client');
Now, I wanted to change the require
to an import
:
import {
CLIENT_EVENTS: { RTM: RTM_CLIENT_EVENTS },
} from '@slack/client';
But I got the following error:
ES2015 named imports do not destructure. Use another statement for destructuring after the import
Any idea why they don't destructure?
And this is destructuring an object. Let's take the following example: const user = { firstname: 'Chris', lastname: 'Bongers', age: 32 }; const { firstname, age } = user; By using this destructuring, we extract specific properties from an object.
To destructure an array in JavaScript, we use the square brackets [] to store the variable name which will be assigned to the name of the array storing the element. const [var1, var2, ...]
You can use the object destructuring assignment to swap the values of two or more different variables. The snippet above used direct object destructuring to reassign the firstName and website variables with the values of the object literal on the right-hand side of the assignment operator.
import
has strict syntax that only mimics shallow destructuring syntax but is supposed to be statically analyzed. So does export
, it mimics object literal syntax.
As the error suggests, the proper way to do this is
import { CLIENT_EVENTS } from '@slack/client';
const { RTM: RTM_CLIENT_EVENTS } = CLIENT_EVENTS;
The import
statement in javascript does not natively support the destructuring syntax.
But you can rename the imports in the following ways:
import {RTM_CLIENT_EVENTS as RTM} from '@slack/client'
Here the RTM_CLIENT_EVENTS
propery will be imported and renamed to RTM
using the as
keyword.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With