18

我正在将大型代码库迁移到 Typescript,但想很好地掌握我应该在何时何地使用某些东西。

现在我在模块中有一些大的命名空间:

(function (nameSpace) {

    var privateVariables = '';

    function privateFunctions () { }        

    // Public methods
    nameSpace.someMethodHere = function () { };

}(window.nameSpace = window.nameSpace || {}));

我的问题是TypeScript,我只是把这些变成类有什么区别/好处吗?还是应该只是一个包含类(每个方法)的大模块?

module nameSpace {

    export class someMethodHere {
       // etc
    }

    // more classes (my methods) here ??
}

-或者-

class nameSpace {

    someMethodHere () {
        // code
    }
    // more prototyped methods here
}   

或者我应该以我目前拥有的相同模块方式设置它们?我正在尝试,但它一直给我错误,不知道nameSpace.someMethodHere在没有类的模块中我是如何做的!

4

2 回答 2

20
  • 考虑使用模块作为单例(一个随处可访问的静态对象)的一个很好的选择,其中常见的用法是库。
  • 当您需要创建此类的多个实例或计划扩展此类时,请考虑使用一个类。

基本上,模块很适合将所有代码打包到一个方便的全局对象中,而类可以智能地构建代码和数据表示。

[编辑] “内部模块”已重命名为“命名空间”,而且现在不鼓励在可以导入模块时使用命名空间。命名空间可以是部分的(即在许多文件中描述),虽然这有时很有用,但这种方法过于全局而无法被编译器正确优化。在这里阅读更多

于 2015-10-07T05:10:48.010 回答
12

这取决于。一个模块应该是一组离散的“事物”,而不仅仅是杂乱无章的不同类的集合,所以如果事物看起来像是属于一起的,请使用模块将它们分组。

我相信 TypeScript 团队在发布指南之前正在等待看看人们如何使用该语言,但我想人们会在他们当前发布脚本的地方发布一个模块 - 所以 jQuery 将是一个模块,每个 jQuery 插件都是一个模块,一个测试框架将是一个模块,而 AOP 框架将是一个模块 - 例如。

于 2012-11-06T17:09:58.203 回答