2016-12-14 104 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

你不能。导入使用的语法与解构非常相似,但不完全相同。请参阅本文[ES6 JavaScript深层解构](https://ponyfoo.com/articles/es6-destructuring-in-depth)(特殊情况:最后导入)。 –

+0

@OriDrori谢谢,我得到我的错误.. –

+0

即使你*可*,你可能不应该。这将违反[Demeter法](https://en.wikipedia.org/wiki/Law_of_Demeter)。 –

回答

2

ImportClauseimport与解构不一样。它们确实具有一些语法相似性,但是如果通读the spec on import,则可以看到它从不涉及通常的解构结构,如DestructuringAssignmentTargetBindingPattern

记住,进口创建模块之间的绑定,但解构赋值从源复制到目标。如果在源模块中bar的值发生变化,那么您是否会改变导入的a? (毕竟,import { bar } from 'my-module';,如果bar更改为my-module,则导入的bar反映了此更改。)或者在某些时间点,解构导入将bar.a的值复制到a?如果是这样,什么时候点?

你明白了。他们只是不同的野兽。

当然,你可以导入和然后解构的:

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

...但我敢肯定,你知道的。 :-)

+0

感谢您的回复:) –