我正在尝试组织我的TS项目,并且已将大部分类和接口移动到/models
目录中。为了让自己/未来的开发人员更轻松,我想要创建一个导入所有模型的顶级models.ts
文件,然后重新导出它们会使事情变得更容易。
为此,我考虑创建一个名为Models
的命名空间/模块,然后导出该命名空间/模块。但是,我遇到了一些问题,试图将我导入的内容链接到导出的模块,如下所示:
import {Args} from "./models/args";
import {Response} from "./models/response";
import {Inventory} from "./models/inventory";
export module Models {
// Trying things like:
// this.Args = Args --- nope, not a class
// Args = Args -- nope
// export Args -- nope
// export class Args -- nope
// export class ArgsModel extends Args -- nope
//
// This works, but it's renaming, and it feels hackish.
export class ArgsModel extends Args {}
//
// import export Args from "./models/args" -- nope, cant import from within a module
}
搜索了一段时间,我发现了很多关于模块的信息,但没有特别解决这个问题,这让我意识到这可能不是TS使用的模式。为此,我在How to export multiple imported classes as a module找到了一个类似的问题,提出了一个答案,建议做这样的事情:
export * from "./models/args"
export * from "./models/response"
export * from "./models/inventory"
然而,我也觉得我已经走了这么远的兔子洞,我想弄清楚我将如何实现我的初衷,所以我可以更好地理解打字稿。
如何导出包含已导入的类,接口和模块的单个命名空间?
答案 0 :(得分:1)
我想过创建一个名为Models的命名空间/模块,然后导出该命名空间/模块。
您的档案是module
。您不需要使用namespace
。更多:https://basarat.gitbooks.io/typescript/content/docs/project/namespaces.html与模块:https://basarat.gitbooks.io/typescript/content/docs/project/modules.html
我也觉得我已经走到了这个兔子洞那么远的地方,我想弄明白我是怎么想的,所以我可以更好地理解打字稿。
模块导入/导出需要是静态可分析的,因此必须限制在文件的 root 。
然而,您可以从命名空间重新导出它们(如果您真的真的想要)。请注意,您需要重命名 root 一个不同的模块,否则它将被模糊化。
import {Args as ArgsModel} from "./models/args";
export namespace Models {
export const Args = ArgsModel;
}