导出由导入的类/接口组成的模块?

时间:2016-05-12 21:42:01

标签: javascript module typescript ecmascript-6

我正在尝试组织我的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"

然而,我也觉得我已经走了这么远的兔子洞,我想弄清楚我将如何实现我的初衷,所以我可以更好地理解打字稿。

如何导出包含已导入的类,接口和模块的单个命名空间?

1 个答案:

答案 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;
}