Скажем, у меня есть module ( ./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
Что не динамично.
Можно ли экспортировать все значения из объекта?
module
export
ecmascript-6
Mauvm
источник
источник
interface { a: number, b: number, c: number }
? Теоретически это должно быть возможно, правда?export const {a, b, c} = values
- это как раз синтаксис для объявления этого статического интерфейсаОтветы:
Не похоже. Цитата из модулей ECMAScript 6: последний синтаксис :
источник
Я не могу рекомендовать это
решение,но оно работает. Вместо экспорта объекта вы используете именованный экспорт каждого члена. В другом файле импортируйте именованный экспорт первого модуля в объект и экспортируйте этот объект по умолчанию. Также экспортируйте все названные экспорты из первого модуля, используяexport * from './file1';
значения / значение.js
значения / index.js
index.js
источник
{ a, b, c }
, зачем мне экспортировать снова? Настоящий вопрос в том, что, если у меня есть толькоconst obj = { a, b, c }
и могу ли я экспортировать все члены obj? Думаю, ответ - НЕТ.попробуйте это уродливое, но работоспособное решение:
источник
Мне просто нужно было сделать это для файла конфигурации.
Вы можете сделать это так
Имейте в виду, что это использует Typescript.
источник
import config from './config';
Это будет работать с преобразованиями Babel сегодня и должно использовать все преимущества модулей ES2016 всякий раз, когда эта функция действительно появляется в браузере.
Вы также можете добавить,
export default {a, b, c};
что позволит вам импортировать все значения как объект без* as
, т.е.import myModule from 'my-module';
Источники:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export
http://www.2ality.com/2014/09/es6-modules-final.html
источник
Я предлагаю следующее, давайте ждать module.js :
а затем вы можете сделать в index.js :
Дополнительные примеры деструктуризации объектов: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Object_destructuring
источник
Каждый ответ требует изменения операторов импорта.
Если вы хотите иметь возможность использовать:
как в вопросе, и в вашем у
my-module
вас есть все, что вам нужно экспортировать в одном объекте (что может быть полезно, например, если вы хотите проверить экспортированные значения с помощью Joi или JSON Schema), тогда вамmy-module
нужно будет либо:Или:
Не очень красиво, но он компилируется в соответствии с вашими потребностями.
См .: Пример Babel
источник
С javascript можно делать много глупостей. Я оставлю здесь эту цитату из книги YDKJS.
Упомянутая страница книги ->
https://books.google.com.tr/books?id=iOc6CwAAQBAJ&pg=PT150&lpg=PT150&dq=JS+engine+cannot+static+analyze+the+contents+of+plain+object&source=bl&ots=7v8fW&fMUgxyz_sig=ru&hl=en X & ved = 2ahUKEwi4qseXyrDdAhUS-6QKHZYTAEQQ6AEwAHoECAEQAQ # v = onepage & q = JS% 20engine% 20cannot% 20static% 20analyze% 20the% 20contents% 20of% 20plain% 20object & f = false
источник
Экспорт каждой переменной из вашего файла переменных. Затем их импорт с *, как в другом файле, и экспорт в виде константы из этого файла даст вам динамический объект с именованным экспортом из первого файла, который является атрибутами объекта, экспортированного из второго.
Variables.js
Other.js
Third.js
источник