【问题标题】:Is it possible to export * and default from another module in a single statement?是否可以在单个语句中从另一个模块导出 * 和默认值?
【发布时间】:2019-12-26 01:54:24
【问题描述】:

情况

我有一个模块 moduleA,其中包含 default 和命名导出:

// Module A
export {
  A1 as default,
  A2,
  A3,
};

在另一个模块moduleB 中,我想导出(聚合)来自moduleA 的所有内容(default 和命名导出)。我这样做了:

// Module B
export * from "moduleA";

然后在另一个模块moduleC中我导入了moduleBdefault导出,我预计是default模块A的导出:

// Module C
import ModuleB from "moduleB";

但是ModuleB 被解析为undefined

我通过将模块 B 更改为以下来解决此问题,它按预期工作:

// Module B
export { default } from "moduleA";
export * from "moduleA";

问题

我能否以某种方式在模块 B 中以单行方式进行导出?类似下面的东西(这是无效的语法)。

export { default, * } from moduleA;

旁白:为什么export * from <module> 不导出default 导入/导出?

【问题讨论】:

  • "在 JavaScript 中,您不能将这些保留字用作变量、标签或函数名称:...default"

标签: javascript es6-modules


【解决方案1】:

你不能。

根据ecma 规范,export * from "moduleA"; 不会从引用的模块重新导出默认绑定。

There's a proposal,目前在第一阶段,这可能会让你这样做。

【讨论】:

  • 谢谢。这是尽可能清楚的。我只是不确定moduleC 导入会是什么样子,如果moduleB 将使用当前提案中的语法:export * as moduleB from "moduleA";。你能解释一下吗?
【解决方案2】:

如果我正确理解您的问题,我相信下面的 sn-p 就是您正在寻找的模式:

// Module A
export {
  A1 as default,
  A2,
  A3,
};


// Module B
export * as moduleA from 'moduleA;'


// Module C
import * as moduleB from 'moduleB;' /* This is known as a 'namespace import' */

【讨论】:

  • 看起来正是我所需要的。但是当我在我的 React Native 项目中使用它时,我得到了一个错误Support for the experimental syntax exportNamespaceFrom isn't currently enabled。这是 JavaScript 标准中的语法吗?
猜你喜欢
  • 2021-01-09
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 2019-04-09
  • 1970-01-01
  • 2017-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多