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
Que no es dinámico.
¿Es posible exportar todos los valores de un objeto?
module
export
ecmascript-6
mauvm
fuente
fuente
interface { a: number, b: number, c: number }
? Teóricamente debería ser posible, ¿verdad?export const {a, b, c} = values
es precisamente la sintaxis para declarar esa interfaz estáticaRespuestas:
No lo parece. Cita de los módulos ECMAScript 6: la sintaxis final :
fuente
Realmente no puedo recomendar esta
solución alternativa, pero funciona. En lugar de exportar un objeto, utiliza exportaciones con nombre para cada miembro. En otro archivo, importe las exportaciones con nombre del primer módulo a un objeto y exporte ese objeto como predeterminado. También exporte todas las exportaciones nombradas desde el primer módulo usandoexport * from './file1';
valores / valor.js
valores / index.js
index.js
fuente
{ a, b, c }
, ¿por qué necesito exportar nuevamente? La verdadera pregunta es ¿qué pasa si solo tengoconst obj = { a, b, c }
y puedo exportar todos los miembros de obj? Supongo que la respuesta es NO.prueba esta solución fea pero viable:
fuente
Solo necesitaba hacer esto para un archivo de configuración.
Puedes hacerlo así
Esto está usando TypeScript, eso sí.
fuente
import config from './config';
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 llegue a un navegador.
También puede agregar lo
export default {a, b, c};
que le permitirá importar todos los valores como un objeto sin* as
, es decirimport myModule from 'my-module';
Fuentes:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export
http://www.2ality.com/2014/09/es6-modules-final.html
fuente
Sugiero lo siguiente, esperemos un module.js :
y luego puedes hacer en un index.js :
Más ejemplos de destrucción de objetos: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Object_destructuring
fuente
Cada respuesta requiere cambiar las declaraciones de importación.
Si quieres poder usar:
como en la pregunta, y en su
my-module
tiene todo lo que necesita para exportar en un objeto (que puede ser útil, por ejemplo, si desea validar los valores exportados con Joi o JSON Schema), entoncesmy-module
tendría que ser:O:
No es bonito, pero se adapta a lo que necesita.
Ver: ejemplo de Babel
fuente
Puedes hacer muchas cosas estúpidas con javascript. Dejaré aquí esta cita del libro YDKJS.
Página mencionada del libro ->
https://books.google.com.tr/books?id=iOc6CwAAQBAJ&pg=PT150&lpg=PT150&dq=JS+engine+cannot+stately+analyze+the+contents+of+plain+object&source=bl&ots=7v8fMUgwhx&sig=axOv3Bpko X & ved = 2ahUKEwi4qseXyrDdAhUS-6QKHZYTAEQQ6AEwAHoECAEQAQ # v = onepage & q = JS% 20engine% 20 cannot% 20stately% 20analyze% 20the% 20contents% 20of% 20plain% 20object &f = false
fuente
Exportando cada variable de 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 como atributos del objeto exportado desde el segundo.
Variables.js
Other.js
Third.js
fuente