12

我对 TS 再出口有点迷失了。假设我创建了一对测试模块;

测试1.ts;

export function test1() {
    return 'test';
}

test2.ts;

export function test2() {
    return 'test';
}

我相信我应该能够做这样的事情;

结合.ts;

export * from './test1';
export * from './test2';

module.exports = {
    test1: test1,
    test2: test2
};

但是,没有这样的运气。似乎有很多 GitHub 问题讨论了解决此问题的各种方法,包括使用旧的 hack,export import * from './test1'但他们似乎都在争论 ES6 规范的真正含义,但没有一个真正起作用。

做这样的汇总的正确方法是什么?我是不是走错了路来跨文件拆分模块?命名空间在这里更合适吗?

4

2 回答 2

29

module.exports使用ES 模块时不应该使用;module.exports是 CommonJS 模块的一部分,而不是 EcmaScript 模块的一部分。

Rollup,直接导出

您正确的汇总模块将是:

export * from './test1';
export * from './test2';

然后使用汇总:

import * as rollup from './combined';
// or `import { test1, test2 } from './combined'`;
// or any other valid import

rollup.test1();
rollup.test2();

汇总,添加命名空间对象

如果你想用额外的命名空间导出 test1 和 test2 然后使用export {}语法:

import * as test1 from './test1';
import * as test2 from './test2';
export { test1, test2 };

那么用法就变成了:

import * as rollup from './combined';
rollup.test1.test1();
rollup.test2.test2();

汇总,使用不同的导出名称

如果您有一些名称冲突,您还可以使用重定向名称as,就像使用import

export { test1 as t1 } from './test1';
export { test2 as t2 } from './test2';

那么用法就变成了:

import * as rollup from './combined';
rollup.t1();
rollup.t2();
于 2016-01-01T20:36:56.283 回答
0

看起来您无法使用 * 导出模块中的所有内容,即使您使用 * 作为 localModuleName 也是如此。

相反,您必须命名组合模块从其他模块导出的内容。

// combined.ts
export {test1, test3} from './test1'; 
export {test2} from './test2';
于 2016-01-01T17:07:18.277 回答