在TS 1.7中重新导出ES6模块?

时间:2016-01-01 15:50:31

标签: typescript ecmascript-6 es6-module-loader typescript1.7

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

test1.ts;

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

test2.ts;

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

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

combined.ts;

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

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

但是,没有这样的运气。似乎有很多GitHub问题讨论了各种方法,包括使用export import * from './test1'的旧hack,但它们似乎都在争论ES6规范的真正含义,而且实际上都没有。

这样做汇总的正确方法是什么?我是否只是走错路径将文件拆分成文件?名称空间在这里更合适吗?

2 个答案:

答案 0 :(得分:29)

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

汇总,直接导出

您的正确汇总模块将只是:

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();

Rollup,添加名称空间对象

如果要使用额外的命名空间导出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();

答案 1 :(得分:0)

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

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

// combined.ts
export {test1, test3} from './test1'; 
export {test2} from './test2';