ES6 экспорт всех значений из объекта
скажем, у меня есть модуль (./my-module.js
) который имеет объект, который должен быть его возвращаемое значение:
let values = { a: 1, b: 2, c: 3 }
// "export values" results in SyntaxError: Unexpected token
так что я могу импортировать их как:
import {a} from './my-module' // a === 1
import * as myModule from './my-module' // myModule.a === 1
единственный способ, который я нашел, - это жесткое кодирование экспорта:
export let a = values.a
export let b = values.b
export let c = values.c
// or:
export let {a, b, c} = values
, который не является динамическим.
можно ли экспортировать все значения из объекта?
8 ответов:
не похоже на то. Цитата из модули ECMAScript 6: окончательный синтаксис:
Вам может быть интересно-зачем нам нужен именованный экспорт, если мы можем просто экспортировать объекты по умолчанию (например, CommonJS)? Ответ заключается в том, что вы не можете применить статическую структуру через объекты и потерять все связанные с этим преимущества (описанные в следующем разделе).
Я не могу действительно рекомендовать этот
решениеработа-вокруг, но он функционирует. Вместо экспорта объекта используется именованный экспорт каждого элемента. В другом файле импортируйте именованный экспорт первого модуля в объект и экспортируйте этот объект по умолчанию. Также экспортируйте все именованные экспорта из первого модуля с помощьюexport * from './file1';
ценностей/ценности.js
let a = 1; let b = 2; let c = 3; export {a, b, c};
значения Индекса/.js
import * as values from './values'; export default values; export * from './values';
.js
import values, {a} from './values'; console.log(values, a); // {a: 1, b: 2, c: 3} 1
попробуйте это уродливое, но работоспособное решение:
// 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);
мне просто нужно было сделать это для конфигурационного файла.
var config = { x: "CHANGE_ME", y: "CHANGE_ME", z: "CHANGE_ME" } export default config;
Вы можете сделать это
import { default as config } from "./config"; console.log(config.x); // CHANGE_ME
это с помощью Typescript виду вас.
export const a = 1; export const b = 2; export const c = 3;
это будет работать Вт/ Бабель превращает сегодня и должны воспользоваться всеми преимуществами модулей ES2016 всякий раз, когда эта функция фактически приземляется в браузере.
вы также можете добавить
export default {a, b, c};
что позволит вам импортировать все значения в качестве объекта без* as
, т. е.import myModule from 'my-module';
источники:
Я предлагаю следующее, Давайте ожидать модуль.js:
const values = { a: 1, b: 2, c: 3 }; export { values }; // you could use default, but I'm specific here
а потом в .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
другие примеры разрушения объектов: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Object_destructuring
каждый ответ требует изменения импортного заявления.
если вы хотите иметь возможность использовать:
import {a} from './my-module' // a === 1 import * as myModule from './my-module' // myModule.a === 1
как в вопросе, так и в вашем
my-module
у вас есть все, что вам нужно экспортировать в один объект (что может быть полезно, например, если вы хотите проверить экспортированные значения с помощью схемы Joi или JSON), то вашmy-module
должно быть либо:let values = { a: 1, b: 2, c: 3 } let {a, b, c} = values; export {a, b, c};
или:
let values = { a: 1, b: 2, c: 3 } export let {a, b, c} = values;
не очень красиво, но он компилирует то, что вы необходимость.
посмотреть: пример Бабеля