解构但也返回源对象

Destructuring but also returning the source object

一个人可以做到

import Foo, { bar } from 'foo-with-bar'

但是,使用解构也可以实现类似的东西,比如

let { * as Foo, bar } = getFooBar()

?

让我们假设 getFooBar()foo-with-bar 模块 return

{ foo: 1, bar: a => console.log(a) }

并且在 import/let 之后,预计会打印 1:

bar(Foo.foo)

不,您不能将命名空间导入与命名导入一起使用(但是您可以将它与默认导入一起使用)。您将不得不使用两个单独的导入声明:

import * as Foo from 'foo-with-bar';
import { bar } from 'foo-with-bar';

不,如果您正在进行解构,您已经在属性中拆分了对象。但是你可以只使用两个赋值:

let Foo = getFooBar();
let { bar } = Foo;

或:

let Foo, { bar } = Foo = getFooBar(); // very questionable and unmaintainable
let Foo = getFooBar(), { var } = Foo; // better

还有一个 object rest property proposal 带有实验性转译器插件,可让您做到

let { bar, ...Foo } = getFooBar();

Foo 将是一个新对象,缺少 bar 属性.