TypeScript 导出用法

TypeScript export usage

我写了一些 TypeScript 代码,我想把它作为一个包来使用,但是我无法准备我的导出和导入语法。有谁能帮助我达到我的方法吗?你可以在下面的图片上看到我的定义

如何将我的函数组合在一个命名空间或 class 中以达到我预期的导入语句。您可以分叉和编辑我的代码。 谢谢指教。

我的实际实现

import {
  utilAFunction1,
  utilAFunction2,
  utilBFunction1,
  utilBFunction2
} from './src/utils';

utilAFunction1();
utilAFunction2();

utilBFunction1();
utilBFunction2();

我的预期实现

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

utils.utilAFunction1();
utils.utilAFunction2();

utils.utilBFunction1();
utils.utilBFunction2();

我的项目文件结构也是

src
 utils
  util-a
   index.ts
  util-b
   index.ts
  index.ts
index.ts
// util-a > index.ts
export function utilAFunction1(): void {
  console.log('Util A function 1');
}

export function utilAFunction2(): void {
  console.log('Util A function 2');
}
// util-b > index.ts
export function utilBFunction1(): void {
  console.log('Util B function 1');
}

export function utilBFunction2(): void {
  console.log('Util B function 2');
}
// utils > index.ts
import { utilAFunction1, utilAFunction2 } from './util-a';
import { utilBFunction1, utilBFunction2 } from './util-b';

export { utilAFunction1, utilAFunction2, utilBFunction1, utilBFunction2 };
// src > index.ts
import {
  utilAFunction1,
  utilAFunction2,
  utilBFunction1,
  utilBFunction2
} from './src/utils';

utilAFunction1();
utilAFunction2();

utilBFunction1();
utilBFunction2();

/*
// my expected import statement and usage
import { utils } from './src/utils';

utils.utilAFunction1();
utils.utilAFunction2();

utils.utilBFunction1();
utils.utilBFunction2();

*/

StackBlitz page

My expected implementation

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

utils.utilAFunction1();
utils.utilAFunction2();

utils.utilBFunction1();
utils.utilBFunction2();

如果不必完全 import { utils } from...,您可以在不对 utils:

进行任何更改的情况下执行此操作
import * as utils from './src/utils';

为模块导入 模块命名空间对象,它对模块中的所有命名导出具有只读属性,并且(如果模块具有默认导出)一个default 属性 默认导出。

或者,如果您真的希望它具体如下:

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

...然后您可以将其添加到 utils:

export const utils = { utilAFunction1, utilAFunction2, utilBFunction1, utilBFunction2 };

但请注意,其上的属性不像在模块名称空间对象上那样是只读的,尽管您可以轻松地将它们设为只读:

export const utils = Object.freeze({ utilAFunction1, utilAFunction2, utilBFunction1, utilBFunction2 });