gpt4 book ai didi

typescript - 在 Typescript 2.x 中创建命名空间

转载 作者:行者123 更新时间:2023-12-04 16:54:35 26 4
gpt4 key购买 nike

我已经(再次)阅读了 Typescript 的文档以清除有关模块和命名空间的内容,但我仍然有一些暗点。

  • declare namespace Foo{}
  • namespace Foo{}
  • export namespace Foo{}

  • 在这 3 种创建命名空间的方法中,每种方法的预期用途是什么?

    假设我想创建一个 验证命名空间,我有 3 个文件有助于该命名空间。这样做的正确方法是什么,我将如何从另一个文件/模块导入(使用)验证命名空间中的代码?

    最佳答案

    What is the correct way of doing this and how I am going to import(use) the code in Validation namespace from another file/module?



    当您在一个问题中说“导入(使用)”和“文件/模块”时,您是在询问两种截然不同的情况,而每种情况的答案都不同。

    没有办法用 import 做到这一点和模块。每个模块都是一个不同的、独立的作用域,如果你定义了 namespace Validation在每个模块中,您将创建 3 个不同的命名空间,因为来自不同范围的声明不会合并。好吧,您可以使用 declare global 来突破模块范围,但它违背了模块的既定目的 -
    消除全局变量。

    您可以对不是模块的文件执行此操作 - 即没有任何顶级的文件 importexport .但是,您只能使用非模块化 javascript(或 typescript )。您的 namespace Validation将在全局范围内,您不能使用 import和模块,并且您必须将所有文件编译并连接在一起,生成适合使用 <script> 加载的单个脚本标签。

    另见 How do I use namespaces with TypeScript external modules?

    至于具体的语法变体
    declare namespace Foo {}

    这声明存在命名空间 Foo,定义在一些外部文件中(未包含在当前编译中),允许使用 Foo假定包含在 {} 中声明的内容(和 {} 可能只包含声明,而不是这里的定义)
    namespace Foo {}

    这将创建命名空间 Foo
    export namespace Foo {}

    这也会创建命名空间 Foo,但 export可以有不同的含义,这取决于它在源文件中的位置(它还取决于文件是否是模块,但我不想详细说明 export 在没有模块的情况下如何有用)。

    export在顶层,它把文件变成一个模块,并使 Foo可用于在其他模块中导入和使用(但不能扩展)。如 export不在顶层,那么它又取决于:如果它在某个导出的命名空间中,它定义嵌套命名空间,可以由导入该外​​部命名空间的模块访问。如果它在非导出的命名空间中, export我相信没有效果。

    关于typescript - 在 Typescript 2.x 中创建命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43786094/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com