immutable.js destructuring

¿Puedo usar la asignación de desestructuración con immutable.js?



destructuring (1)

Con los objetos JS estándar, se puede usar una asignación de desestructuración como:

let obj = {name: ''james'', code: ''007''} let {name, code} = obj // creates new variables ''name'' and ''code'' (with the proper values)

Según lo sugerido por algún evangelista de Flux / Redux, uso immutable.js para mi aplicación; ¿Puedo usar la desestructuración también en Lista / Mapa inmutable? Por supuesto, uno podría hacer:

let obj = immutable.fromJS({name: ''james'', code: ''007''}) let {name, code} = obj.toJS()

pero parece que esto es bastante ineficiente a medida que los objetos crecen (porque el objeto debe estar profundamente detallado primero).


Con la Lista inmutable, la desestructuración funciona de manera bastante directa. Esto se debe a que la desestructuración de Arrays funciona en todas las iterables ( verificando si algo es iterable ) y no está sujeta solo a js Arrays.

Con Map, la situación es más complicada. A diferencia de la Lista, la desestructuración de estructuras tipo Map está sujeta solo a objetos JS simples y nada más. Actualmente, no parece que la comunidad de ES considere esto como una buena idea (consulte https://esdiscuss.org/topic/extensible-destructuring-proposal )

Sin embargo, existe un plugin de babel que lo habilita: https://github.com/vacuumlabs/babel-plugin-extensible-destructuring Al tener este plugin instalado y habilitado en .babelrc, simplemente puede parchear un Mapa inmutable para tener un .@@get método definido:

// main.js, first file loaded import {Iterable} from ''immutable''; Iterable.prototype[Symbol.for(''get'')] = function(value) {return this.get(value); };

y todo funciona (también desestructuración anidada o desestructuración con valores predeterminados)

import {fromJS} from ''immutable''; const map = fromJS({author: {name: {first: "John", last: "Doe"}, birthdate: "10-10-2010"}}); const {author: {name: {first, last}, birthdate}} = map;

Descargo de responsabilidad: Soy uno de los autores del complemento mencionado anteriormente.