假设我有一个带有一堆导出函数的打字稿文件 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"并导出它,但我不确定这是否是一个好习惯。有没有正确的方法来做到这一点?
答案 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 启发。