从模块导出迭代器,以允许对星号导入进行迭代

问题描述 投票:0回答:1

我有一个带有多个重新导出的索引文件

// things/index.js
export { a } from 'a'
export { b } from 'b'
export { c } from 'c'

现在,我想将另一个文件中的所有things用作函数的参数。这实际上有效:

import * as things from './things'

things[Symbol.iterator] = function* () {
  for (let v in this) { yield v }
}

function print(things) {
  [...things].forEach(thing => {
    console.debug('thing', thing)
  });
}

print(things)

// prints:
// thing a
// thing b
// thing c

我想避免必须以这种方式设置迭代器,而是将其与things一起导出。有办法吗?

javascript es6-modules iterable
1个回答
0
投票

而不是使用单独的命名导出,请考虑使用single导出(命名或其他方式),该导出是具有abc属性的对象,具有[ C0]属性:

Symbol.iterator

或迭代值(由于不可枚举,因此不会包含// things/index.js import { a } from 'a' import { b } from 'b' import { c } from 'c' export const things = { a, b, c, [Symbol.iterator]: function* () { yield a; yield b; yield c; } }; 属性,因为它无法枚举):

Symbol.iterator
© www.soinside.com 2019 - 2024. All rights reserved.