Как экспортировать константы, определенные с помощью деструктуризации объекта - PullRequest
0 голосов
/ 01 января 2019

Руководствуясь правилом предпочтения-деструктуризации Эслинта, я определил некоторые константы следующим образом:

const {
    NODE_ENV,
    API_URL,
} = process.env;

Можно ли экспортировать эти константы, добавив префикс к выражению export?

export const {
    NODE_ENV,
    API_URL,
} = process.env;

Это может показаться естественным, но eslint-plugin-import жалуется на нарушение правила import / named : API_URL not found in '../constants'.Фактически, это использование export также не описано на соответствующей странице MDN .

Должны ли мы затем повторять все константы в отдельном операторе export?

const {
    NODE_ENV,
    API_URL,
} = process.env;

export {
    NODE_ENV,
    API_URL,
};

Ответы [ 2 ]

0 голосов
/ 01 января 2019

Можно ли экспортировать эти константы, добавив префикс к выражению export?

export const {
    NODE_ENV,
    API_URL,
} = process.env;

Да, это полностью верно в соответствии со спецификацией.Вы можете использовать шаблоны деструктурирования в объявлениях экспортируемых const s.

Это может показаться естественным, но eslint-plugin-import жалуется на нарушение import / named rule: API_URL not found in '../constants'.

Похоже, этот плагин не работает.Фактически, ваш точный вариант использования был ранее зарегистрирован как работающий .

0 голосов
/ 01 января 2019

Статья 15.2.2.3 спецификации гласит:

 ...
ExportDeclaration : export VariableStatement
ExportDeclaration : export Declaration

Статья 13.1.4 гласит:

Declaration : LexicalDeclaration

Статья 13.3говорит:

LexicalDeclaration:
   LetOrConst BindingList;

LetOrConst :
 let
 const

BindingList :
 LexicalBinding
 BindingList, LexicalBinding

 LexicalBinding:
  BindingPattern Initializer

Поэтому это:

 // ExportDeclaration
  export  // export
    // Declaration
    // LexicalDeclaration:
    const // LetOrConst
     // LexicalBindingList
     // LexicalBinding
     { NODE_ENV, API_URL } // BindingPattern
      = process.env; // Initializer

- полностью допустимый JavaScript.

...