es2015 模块 - 如何动态命名导出

es2015 modules - how to name exports dynamically

我想创建一个模块 h,它为每个 HTML 元素导出一个函数。用法如下:

import {div, p} from 'h'

const myDiv = div(p('some text'))

模块的定义如下:

const h = {}
for (let tagName of ['div', 'p', /* ... */]) {
  h[tagName] = (...children) => {
    // ...
  }
}

export const div = h.div
export const p = h.p
/* ... */

我不喜欢每个导出都必须明确列出。我如何使这些动态化?

how to name exports dynamically

你不能。 importexport 语句是专门以这种方式设计的,因为它们必须是静态可分析的,即在执行代码之前 必须知道导入和导出名称 .

如果您需要一些动态的东西,那么做您已经在做的事情:导出“地图”(或对象)。人们仍然可以使用解构来获得他们想要的东西:

const {div} = h;