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 64

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;

не очень красиво, но он компилирует то, что вы необходимость.

посмотреть: пример Бабеля