簡體   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