繁体   English   中英

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

[英]Is it idiomatic to use namespaces in Typescript?

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

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

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

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

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

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 名称空间不推荐用于较新的代码。 如果是这种情况,我该怎么办?

他们将能够导入 IR、Foo 和 Bar,即使大多数人不应该导入它们。

真奇怪。 要么你想导出或不导出一个类型,你为什么要关心消费者如何不导入它? 你无法控制它。

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

export {doSomething} from 'thismodule'

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM