在 javascript es6 命名导出中使用 ... 传播语法

using the ... spread syntax in javascript es6 named exports

我正在尝试将库中的所有内容作为散列导入,修改它,然后重新导出修改后的散列,但不知道库中所有命名的导出。例如:

import * as reactBootstrap from 'react-bootstrap';

wrappedReactBootstrap = doFunnyThingsTo(reactBootstrap);

export {
  ...wrappedReactBootstrap
};

// or
export wrappedReactBootstrap;

我对https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export的理解是规范不允许以下内容。有人可以确认吗?

显然,循环是不可能的,因为导出和导入语句必须是顶级的。

对象剩余分布是 stage 3 proposal 并且不是任何规范的一部分(可能会包含在 ES2018 中)。

更重要的是,export 具有模仿现有 JS 语法的语法,但不会将 { ... } 解释为表达式。 export syntax was strictly defined 因为 ES2015 模块应该是静态分析的。这是他们的好处之一,但它需要开发人员明确指定导出和导入。

由于 { ...wrappedReactBootstrap } 引入了动态导出(这里正是为此目的而使用),因此 ES2015 模块不支持它 export 并且不太可能支持。

如果需要为导出提供动态行为,可以将其作为命名或默认对象导出和导入。

import * as reactBootstrap from 'react-bootstrap';

export default doFunnyThingsTo(reactBootstrap);

并且喜欢使用

import wrappedReactBootstrap from '...';

const { funny, thing } = wrappedReactBootstrap;

显然,wrappedReactBootstrap 对象不会以这种方式获得 ES2015 模块的好处,例如摇树。