在Typescript中使用名称空间是惯用的吗?

时间:2020-05-18 01:42:55

标签: typescript typescript-namespace

我正在发布一个具有一些功能的库。其中一个函数返回库中的内部数据结构以用于调试。目前,我的类型声明文件如下所示:

export default function doSomething(): void;
export function __dumpInternalRepresentation(): IR;

interface IR { ... }
interface Foo extends IR { ... }
interface Bar extends IR { ... }

但是,我认为这会使用户感到困惑,因为即使大多数人不应该导入它们,他们也将能够导入IRFooBar。 / p>

因此,我正在考虑将声明文件切换为:

export default function doSomething): void;
export function __dumpInternalRepresentation(): internal.IR;

export namespace internal {
    export interface IR { ... }
    export interface Foo extends IR { ... }
    export interface Bar extends IR { ... }
}

这样,所有内部数据结构都隐藏在internal内部。

但是,我已经读到不建议将Typescript名称空间用于较新的代码。如果是这种情况,我该怎么办?

1 个答案:

答案 0 :(得分:0)

然后,即使大多数人不应该导入IR,Foo和Bar,它们也将能够导入。”

很奇怪。您想导出还是不导出类型,为什么要关心消费者如何不导入呢?您无法控制。

也许您需要这样做:创建另一个模块anotherModule.ts

export {doSomething} from 'thismodule'

因此,当消费者import ... form 'anotherModule'时,他们不会看到您要隐藏的IR。但是他们仍然可以import {IR} from 'thisModule'

除非要组织来自多个项目的类型层次结构,否则可以将名称空间合并到一个项目中,除非使用命名空间。我什至从未测试过。