模块导入/导出的复合写法

如果在一个模块之中,先输入后输出同一个模块,import 语句可以与 export 语句写在一起。

模块整体转发

module 模块整体导入后,直接完整导出。

export * from 'module'

模块部分接口转发

module 模块导入 foobar,并直接导出这两个接口。

export { foo, bar } from 'module'
// 可以理解为
import { foo, bar } from 'module'
export { foo, bar }

实际上,这样的写法只是相当于对外转发了这两个接口,当前模块不能直接使用这两个接口。

模块部分重命名转发

模块导入的接口重命名,从 module 导入 foo 接口,并以 newFoo 的名义导出。

export { foo as newFoo } from 'module'

默认模块转发

export { default } from 'module'

命名模块改默认模块

export { foo as default } from './module'
// 等同于
import { foo } from './module'
export default foo

默认模块改命名模块

export { default as foo } from './module'

无对应写法场景

下面三种写法,没有对应的复合写法:

  • 命名模块重命名转发
  • 默认模块转发
  • 整体和部分模块共同转发
// 命名模块重命名转发
import * as foo from './module'
// 默认模块转发
import foo from './module'
// 整体和部分模块共同转发
import foo , { namedFoo } from './module'

为了做到形式的对称,现在有提案,提出补上这三种复合写法。

export * as foo from './module'
export foo from './module'
export foo , { namedFoo } from './module'