module - smart - solidity español
ES6 exporta todos los valores del objeto (9)
Digamos que tengo un módulo (
./my-module.js
) que tiene un objeto que debería ser su valor de retorno:
let values = { a: 1, b: 2, c: 3 }
// "export values" results in SyntaxError: Unexpected token
Entonces puedo importarlos como:
import {a} from ''./my-module'' // a === 1
import * as myModule from ''./my-module'' // myModule.a === 1
La única forma que encontré es codificando las exportaciones:
export let a = values.a
export let b = values.b
export let c = values.c
// or:
export let {a, b, c} = values
Lo cual no es dinámico.
¿Es posible exportar todos los valores de un objeto?
Cada respuesta requiere el cambio de las declaraciones de importación.
Si quieres poder usar:
import {a} from ''./my-module'' // a === 1
import * as myModule from ''./my-module'' // myModule.a === 1
como en la pregunta, y en su
my-module
tiene todo lo que necesita exportar en un objeto (que puede ser útil, por ejemplo, si desea validar los valores exportados con el esquema Joi o JSON), entonces su
my-module
debería ser tanto:
let values = { a: 1, b: 2, c: 3 }
let {a, b, c} = values;
export {a, b, c};
O:
let values = { a: 1, b: 2, c: 3 }
export let {a, b, c} = values;
No es bonito, pero se ajusta a lo que necesitas.
Ver: ejemplo de Babel
Exportar cada variable desde su archivo de variables. Luego, importarlos con * como en su otro archivo y exportarlos como una constante desde ese archivo le dará un objeto dinámico con las exportaciones nombradas del primer archivo que son atributos en el objeto exportado desde el segundo.
Variables.js
export const var1 = ''first'';
export const var2 = ''second'':
...
export const varN = ''nth'';
Other.js
import * as vars from ''./Variables'';
export const Variables = vars;
Third.js
import { Variables } from ''./Other'';
Variables.var2 === ''second''
No lo parece así. Cita de los módulos ECMAScript 6: la sintaxis final :
Puede que se pregunte: ¿por qué necesitamos exportaciones con nombre si simplemente podríamos exportar objetos por defecto (como CommonJS)? La respuesta es que no puede imponer una estructura estática a través de objetos y perder todas las ventajas asociadas (descritas en la siguiente sección).
Puedes hacer muchas cosas estúpidas con javascript. Dejaré esta cita aquí del libro YDKJS.
Página mencionada del libro ->
Realmente no puedo recomendar esta
solución
, pero funciona.
En lugar de exportar un objeto, utiliza exportaciones con nombre de cada miembro.
En otro archivo, importe las exportaciones con nombre del primer módulo a un objeto y exporte ese objeto por defecto.
También exporte todas las exportaciones nombradas desde el primer módulo usando
export * from ''./file1'';
valores / valor.js
let a = 1;
let b = 2;
let c = 3;
export {a, b, c};
valores / index.js
import * as values from ''./values'';
export default values;
export * from ''./values'';
index.js
import values, {a} from ''./values'';
console.log(values, a); // {a: 1, b: 2, c: 3} 1
Solo tenía que hacer esto para un archivo de configuración.
var config = {
x: "CHANGE_ME",
y: "CHANGE_ME",
z: "CHANGE_ME"
}
export default config;
Puedes hacerlo así
import { default as config } from "./config";
console.log(config.x); // CHANGE_ME
Esto está usando el mecanografiado.
Sugiero lo siguiente, esperemos un module.js :
const values = { a: 1, b: 2, c: 3 };
export { values }; // you could use default, but I''m specific here
y luego puedes hacer en un index.js :
import { values } from "module";
// directly access the object
console.log(values.a); // 1
// object destructuring
const { a, b, c } = values;
console.log(a); // 1
console.log(b); // 2
console.log(c); // 3
// selective object destructering with renaming
const { a:k, c:m } = values;
console.log(k); // 1
console.log(m); // 3
// selective object destructering with renaming and default value
const { a:x, b:y, d:z = 0 } = values;
console.log(x); // 1
console.log(y); // 2
console.log(z); // 0
Más ejemplos de objetos destructores: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Object_destructuring
prueba esta solución fea pero viable:
// use CommonJS to export all keys
module.exports = { a: 1, b: 2, c: 3 };
// import by key
import { a, b, c } from ''commonjs-style-module'';
console.log(a, b, c);
export const a = 1;
export const b = 2;
export const c = 3;
Esto funcionará con las transformaciones de Babel hoy y debería aprovechar todos los beneficios de los módulos ES2016 siempre que esa característica realmente llegue a un navegador.
También puede agregar
export default {a, b, c};
que le permitirá importar todos los valores como un objeto sin el
* as
, es decir,
import myModule from ''my-module'';
Fuentes: