2016-12-14 2 views
1

Я заметил, что импорт ES6 деструктурирующий может реализовать как ниже образом,Могу ли я использовать глубокий деструктурирующий импорт в синтаксисе es6?

foo.js

export default() => { 
    return { 
    a: 'b' 
    } 
} 

index.js

import foo from './foo'; 
export default foo; 
export const bar = foo(); 

так что я могу использовать модуль,

import foo, { bar, } from 'my-module';

, но как я мог бы использовать глубоко деструктурирующий импорт из моего-модуля, я всегда проваливался, следуя ниже способа,

import foo, { bar: { a } } from 'my-module';

это похоже ES6 уже реализовать выше синтаксис, но как использовать его ..

благодарит за ваше время,

Отношения.

+0

Вы не можете. Импорт использует синтаксис, который очень похож на деструктурирование, но не идентичен. См. Статью [Уничтожение эскизов JavaScript в глубину] (https://ponyfoo.com/articles/es6-destructuring-in-depth) (специальный случай: импорт в конце). –

+0

@OriDrori спасибо, я получаю свою ошибку. –

+0

Даже если вы * можете *, вы, вероятно, не должны. Это будет нарушать [Закон Деметры] (https://en.wikipedia.org/wiki/Law_of_Demeter). –

ответ

2

ImportClauseimport - это не то же самое, что разрушение. У них есть синтаксическое сходство, но если вы читаете the spec on import, вы можете видеть, что он никогда не относится к обычным конструкциям разрушения, таким как DestructuringAssignmentTarget или BindingPattern.

Помните, что импорт создать привязок между модулями, но деструктурирующие задания копирования значения от от источника к цели. С учетом вашего воображаемого импорта деструкции, если значение bar изменится в исходном модуле, изменит ли ваш импортированный a? (В конце концов, с import { bar } from 'my-module';, если bar изменяется в my-module, импортированный bar отражает это изменение.) Или будет ли импорт destructuring скопировать значение bar.a в a на какой-то момент времени? И если да, то какой момент времени?

Вы получаете идею. Они просто разные звери.

Вы можете, конечно, импорта и затем destructure:

import foo, { bar } from 'my-module'; 
let { a } = bar; 

... но я уверен, что вы знали, что. :-)

+0

спасибо за ваш ответ :) –