【问题标题】:Does TypeScript support namespace?TypeScript 是否支持命名空间?
【发布时间】:2012-09-26 02:51:52
【问题描述】:

如标题所示:TypeScript 是否支持命名空间?如果是这样,我该如何使用它们?

【问题讨论】:

    标签: namespaces typescript


    【解决方案1】:

    Typescript 允许定义与 ECMAScript 6 中的内容密切相关的 模块。以下示例取自规范:

    module outer {
        var local = 1;
        export var a = local;
        export module inner {
            export var x = 10;
        }
    }
    

    如您所见,模块具有名称并且可以嵌套。如果您在模块名称中使用点,typescript 会将其编译为嵌套模块,如下所示:

    module A.B.C {
        export var x = 1;
    }
    

    这等于

    module A {
        module B {
            module C {
                export var x = 1;
            }
        }
    }
    

    同样重要的是,如果您在一个打字稿程序中重复使用完全相同的模块名称,那么代码将属于同一个模块。因此,您可以使用嵌套模块来实现分层命名空间。

    【讨论】:

    【解决方案2】:

    从 1.5 版开始,Typescript 支持 namespace 关键字。命名空间相当于内部模块。

    来自What's new in Typescript

    之前:

    module Math {
        export function add(x, y) { ... }
    }
    

    之后:

    namespace Math {
        export function add(x, y) { ... }
    }
    

    为了定义一个内部模块,现在您可以同时使用modulenamespace

    【讨论】:

    • modulenamespace 都转换为相同的 JavaScript 代码。
    • 我不推荐 namespace 也不会将其与 module 源代码混合使用。
    【解决方案3】:

    这是一个 TypeScript 命名空间示例:

    ///<reference path='AnotherNamespace/ClassOne.ts'/>
    ///<reference path='AnotherNamespace/ClassTwo.ts'/>
    
    module MyNamespace
    {
        import ClassOne = AnotherNamespace.ClassOne;
        import ClassTwo = AnotherNamespace.ClassTwo;
    
        export class Main
        {
            private _classOne:ClassOne;
            private _classTwo:ClassTwo;
    
            constructor()
            {
                this._classOne = new ClassOne();
                this._classTwo = new ClassTwo();
            }
        }
    }
    

    您可以在这里查看更多信息:http://www.codebelt.com/typescript/javascript-namespacing-with-typescript-internal-modules/

    【讨论】:

      【解决方案4】:

      没有“命名空间”关键字,但内部模块(使用“模块”关键字)和外部模块(使用“导出”关键字)提供了一种将代码划分为逻辑层次结构的类似方法。

      【讨论】:

      • 从 typescript 1.5 开始就有这样一个关键字
      • 我不推荐 namespace 也不会将其与 module 源代码混合使用。
      【解决方案5】:

      错误...

      module A.B.C {
          export var x = 1;
      }
      

      等于

      module A {
          export module B {
              export module C {
                  export var x = 1;
              }
          }
      }
      

      因为你可以在模块A之外写:

      var y = A.B.C.x;
      

      但是:

      module A {
          module B {
              module C {
                  export var x = 1;
              }
              var y = C.x; // OK
          }
          //var y = B.C.x; // Invalid
      }
      //var y = A.B.C.x;   // Invalid
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多