如何在ES6语法中对导入进行深度解构?

时间:2016-12-14 08:25:02

标签: javascript ecmascript-6

我注意到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';

但是当我使用my-module的“深度解构”导入时,它失败了:

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

似乎ES6已经实现了上述语法,但我该如何使用它呢?

1 个答案:

答案 0 :(得分:4)

import ImportClause 与解构不同。它们确实有一些语法相似性,但是如果你通读the spec on import,你会发现它从未引用通常的解构结构,例如 DestructuringAssignmentTarget BindingPattern

请记住,导入会在模块之间创建绑定,但是解构分配会将从源复制到目标。使用想象的解构导入,如果源模块中bar的值发生更改,是否会更改导入的a? (毕竟,对于import { bar } from 'my-module';,如果bar中的my-module发生了更改,则导入的bar会反映出此更改。)或者,解构导入会复制{{1}的值从某个时间点开始到bar.a?如果是的话,到了什么时候?

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

您当然可以导入然后 destructure:

a

......但我相信你知道的。 : - )