繁体   English   中英

TypeScript组织:命名空间? 模块? 混乱

[英]TypeScript organization: namespaces? modules? confusion

我是TypeScript的新手,我读的关于模块和命名空间的内容越多,它就越让我困惑。 我应该使用模块吗? 我应该使用命名空间吗? 我应该同时使用吗? 救命!

我有现有的javascript(.js)文件,我正在尝试将其转换为TypeScript。 有一个.js文件包含一些常规函数,一个.js文件包含一些特定于过滤器的函数。

现在我想用TypeScript组织这个,就像我通常用C#做的那样。

这是正确的用法还是应该如何组织?

我不是在使用模块,不是吗? (怎么样?)

Company.ts

namespace Company {

  // nothing yet, but in future it might.

}

Company.Project.ts

namespace Company.Project {

  import Company; // like this?

  let myVar : string = "something";

  export function handyGeneralFunction1(foo, bar) {
    // ...
  }

  export function handyGeneralFunction2(foo, bar, foo, bar) {
    // ...
    doInternalCalc();
    // ...
  }

  export function handyGeneralFunction3() {
    // ...
  }

  function doInternalCalc() {
    // ...
  }
}

Company.Project.Filter.ts

namespace Company.Project.Filter {

    import Project = Company.Project; // like this?

    export function initializeFilter() {
        // ...
        initMetadata();
        // ...
    }

    function initMetadata() {
        // ...
        Project.handyGeneralFunction3();

        let helper : FilterHelper = new FilterHelper("aaaa,bbbb");
        let res:string[] = helper.parseData();
    }

    function foo() {
        // ...
        let x :string = Project.myVar + " else"; // can I use myVar here?
    }

   // a class in the namespace
   export class FilterHelper {

         data: string;

        constructor(theData: string) {
            this.data = theData;
        }

        parseData() : string[] {
             // ...
             return new Array<string>();
        }
   }

}

如果你有可能真正改进项目结构,你肯定应该使用模块而不是命名空间。 根据项目的规模,这可能需要一些努力。

如果您的应用程序不是那么大并且您不想投资转换到可以处理实际模块的不同构建系统,那么引入命名空间可能很有用。 使用命名空间并不比包含函数和变量的某些命名全局变量多得多。 由于没有任何适当的依赖结构,这很快就会变得混乱。 您需要注意以正确的顺序导入所有文件以使命名空间正常工作。 您使用的导入语法甚至可以省略,因为您无论如何只引用另一个需要在该时间点初始化的全局对象。

因此,如果您无法对代码库进行任何更大的更改,那么命名空间可能是您的第一步。 对于面向未来的设置,我肯定会建议使用真正的模块。 但请注意,这不是免费的。

有关详细信息,我建议您查看https://www.typescriptlang.org/docs/handbook/namespaces-and-modules.html上的官方评论或https://中的TypeScript Deep Dive部分。 basarat.gitbooks.io/typescript/content/docs/project/namespaces.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM