Ответ 1
С неизменным списком деструктурирование работает довольно прямо. Это связано с тем, что разрушение массивов работает на каждом итеративном (проверке того, что что-то повторяется) и не подвергается только массиву js.
С картой ситуация сложнее. В отличие от List, деструктуризация Map-подобных структур подчиняется просто простым JS-объектам и не более того. В настоящее время не кажется, что сообщество ES считает это хорошей идеей (см. https://esdiscuss.org/topic/extensible-destructuring-proposal)
Однако существует babel-плагин, который позволяет это: https://github.com/vacuumlabs/babel-plugin-extensible-destructuring
Если этот плагин установлен и включен в .babelrc, вы можете просто установить неизменяемую карту для определения метода [email protected]@get
:
// main.js, first file loaded
import {Iterable} from 'immutable';
Iterable.prototype[Symbol.for('get')] = function(value) {return this.get(value); };
и все работает (также вложенное деструктурирование или деструктурирование со значениями по умолчанию)
import {fromJS} from 'immutable';
const map = fromJS({author: {name: {first: "John", last: "Doe"}, birthdate: "10-10-2010"}});
const {author: {name: {first, last}, birthdate}} = map;
Отказ от ответственности: я являюсь одним из авторов упомянутого выше плагина.