Typescript:导出命名空间中的所有函数

时间:2016-07-03 09:51:46

标签: typescript

假设我有一个带有一堆导出函数的打字稿文件 Utils

export function utilOne(){}
export function utilTwo(){}

我将index.d.ts文件添加到此文件夹,我从Utils文件导出*:

export * from './Utils';

在我的其他课程中,我想通过utils命名空间访问函数utilOne和utilTwo,如:

utils.utilOne();

我知道我可以像这样导入它:

import * as utils from "./Utils";

但是,由于我将使用utils很多,我希望能够在命名空间中导出utils,如:

export {* as utils} from './Utils';   // this doesn't work

然后使用:

import * from "./Utils";

然而,导出{* as utils}不起作用。我可以将Utils的所有功能都放在一个模块中,并且可以使用#34; utils"并导出它,但我不确定这是否是一个好习惯。有没有正确的方法来做到这一点?

2 个答案:

答案 0 :(得分:8)

  

导入*

没有。即使在支持它们的语言中,全球导入也被视为不良做法。 (例如python Why is "import *" bad?

JavaScript / TypeScript不支持它。毕竟看到foo.bar非常有用,并知道该栏来自foo而不是bar并且不知道栏来自哪里(没有克隆和分析整个项目)。

答案 1 :(得分:1)

除了注意事项之外,根据您的项目,您可以使用间接层来完成此导出。

./utils/internal/utils.ts

export function utilOne(){}
export function utilTwo(){}

./utils/utils.ts

import * as utils from './internal/utils';
export utils;

./test.ts

import { utils } from './utils/utils';

utils.utilOne();

注意事项:

如前所述,这是一种有问题的做法,对名称空间的渴望可能表明存在代码味道。它还可能对您的库和由此产生的项目的摇树性产生负面影响。

注意:此结构受 RxJS 启发。