TypeScript库项目中如何将类统一归至命名空间并调用?
实现TypeScript类统一归至同一命名空间的方案
步骤1:调整类文件的导出方式
无需在每个类文件中单独定义mylib命名空间,直接导出类即可,避免命名空间分散:
src/a/Foo.ts
export class Foo {}
src/b/Bar.ts
export class Bar {}
步骤2:在入口文件统一构建命名空间
修改src/index.ts,将所有类挂载到mylib命名空间下并导出:
import { Foo } from './a/Foo'; import { Bar } from './b/Bar'; // 定义统一的命名空间并导出 export namespace mylib { export const Foo = Foo; export const Bar = Bar; }
步骤3:修正测试文件的调用方式
修复测试文件的语法错误,并通过导出的mylib命名空间访问类:
test/a/Foo.spec.ts
import { mylib } from "../src"; test("constructor", () => { const foo = new mylib.Foo(); // 可添加断言验证实例有效性 expect(foo).toBeInstanceOf(mylib.Foo); });
test/b/Bar.spec.ts
import { mylib } from "../src"; test("constructor", () => { const bar = new mylib.Bar(); expect(bar).toBeInstanceOf(mylib.Bar); });
补充说明
原代码的问题在于每个类文件单独导出mylib命名空间,导致这些mylib是相互独立的模块导出,而非同一个聚合命名空间。通过入口文件统一聚合类并挂载到同一命名空间下,既符合现代TypeScript模块规范,又能实现你需要的mylib.Foo调用方式。
内容的提问来源于stack exchange,提问作者Source
相关产品推荐
相关产品推荐

