Digamos que eu tenha um módulo ( ./my-module.js
) que tem um objeto que deve ser seu valor de retorno:
let values = { a: 1, b: 2, c: 3 }
// "export values" results in SyntaxError: Unexpected token
Então posso importá-los como:
import {a} from './my-module' // a === 1
import * as myModule from './my-module' // myModule.a === 1
A única maneira que encontrei é codificando as exportações:
export let a = values.a
export let b = values.b
export let c = values.c
// or:
export let {a, b, c} = values
O que não é dinâmico.
É possível exportar todos os valores de um objeto?
module
export
ecmascript-6
Mauvm
fonte
fonte
interface { a: number, b: number, c: number }
? Teoricamente, deveria ser possível, certo?export const {a, b, c} = values
é precisamente a sintaxe para declarar essa interface estáticaRespostas:
Não parece. Citação dos módulos ECMAScript 6: a sintaxe final :
fonte
Eu realmente não posso recomendar esta
solução alternativa, mas ela funciona. Em vez de exportar um objeto, você usa exportações nomeadas de cada membro. Em outro arquivo, importe as exportações nomeadas do primeiro módulo para um objeto e exporte esse objeto como padrão. Também exporte todas as exportações nomeadas do primeiro módulo usandoexport * from './file1';
valores / valor.js
valores / index.js
index.js
fonte
{ a, b, c }
, por que devo exportar novamente? A verdadeira questão é e se eu apenas tiverconst obj = { a, b, c }
e puder exportar todos os membros do obj? Acho que a resposta é NÃO.tente esta solução feia, mas viável:
fonte
Eu só precisava fazer isso para um arquivo de configuração.
Você pode fazer assim
Isso é usar o texto digitado, veja bem.
fonte
import config from './config';
Isso funcionará com as transformações do Babel hoje e deve aproveitar todos os benefícios dos módulos ES2016 sempre que esse recurso realmente chegar a um navegador.
Você também pode adicionar o
export default {a, b, c};
que permitirá que você importe todos os valores como um objeto sem o* as
, ou seja,import myModule from 'my-module';
Fontes:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export
http://www.2ality.com/2014/09/es6-modules-final.html
fonte
Eu sugiro o seguinte, vamos esperar um module.js :
e então você pode fazer em um index.js :
Mais exemplos de objetos destrutivos: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Object_destructuring
fonte
Cada resposta requer alteração das declarações de importação.
Se você deseja ser capaz de usar:
como na pergunta, e na sua
my-module
você tem tudo o que precisa para exportar em um objeto (o que pode ser útil, por exemplo, se você deseja validar os valores exportados com Joi ou esquema JSON), então vocêmy-module
deve ser:Ou:
Não é bonito, mas compila o que você precisa.
Veja: Exemplo de Babel
fonte
Você pode fazer muitas coisas estúpidas com javascript. Vou deixar esta citação aqui do livro YDKJS.
Página mencionada do livro ->
https://books.google.com.tr/books?id=iOc6CwAAQBAJ&pg=PT150&lpg=PT150&dq=JS+engine+cannot+statically+analyze+the+contents+of+plain+object&source=bl&ots=7v8fMUgwhx&sig=dPhl3&sigWaX=vBydp3&sig=dPhl3 X & ved = 2ahUKEwi4qseXyrDdAhUS-6QKHZYTAEQQ6AEwAHoECAEQAQ # v = uma página & q = JS% 20engine% 20cannot% 20statically% 20analyze% 20the% 20contents% 20of% 20plain% 20object & f = false
fonte
Exportando cada variável de seu arquivo de variáveis. Em seguida, importá-los com * como em seu outro arquivo e exportar o como uma constante desse arquivo fornecerá um objeto dinâmico com as exportações nomeadas do primeiro arquivo sendo atributos do objeto exportado do segundo.
Variables.js
Other.js
Third.js
fonte