解构但也返回源对象
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
属性.
一个人可以做到
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
属性.