何时在TypeScript中使用Classes vs Modules?

Mar*_*.io 14 typescript

我正在将大量代码转换为Typescript,但希望能够很好地处理我应该使用某些东西的时间和地点.

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

(function (nameSpace) {

    var privateVariables = '';

    function privateFunctions () { }        

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

}(window.nameSpace = window.nameSpace || {}));
Run Code Online (Sandbox Code Playgroud)

我的问题是在TypeScript中,在将这些变成只是类时,我有什么不同/好处吗?或者它应该只是一个包含类(每个方法)的大型模块?

module nameSpace {

    export class someMethodHere {
       // etc
    }

    // more classes (my methods) here ??
}
Run Code Online (Sandbox Code Playgroud)

-要么-

class nameSpace {

    someMethodHere () {
        // code
    }
    // more prototyped methods here
}   
Run Code Online (Sandbox Code Playgroud)

或者我应该以我目前的模块方式设置它们?我正在尝试,它只是不断给我错误,不知道我如何nameSpace.someMethodHere在没有课程的模块内部做!

Fla*_*ken 11

  • 考虑使用模块作为Singleton(一个可在任何地方访问的静态对象)的良好选项,其中常见的用途是库.
  • 当您需要创建此类的多个实例或计划扩展此类时,请考虑使用类.

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


Fen*_*ton 8

这取决于.一个模块应该是一组离散的"事物",而不仅仅是一个混乱的不同类的集合,所以如果它们看起来像它们属于一起,那么使用一个模块对它们进行分组.

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

  • 作为一个基线,如果你要拥有与每个实例相关的数据的多个实例,那么`class`就是你要走的路.如果你只是将逻辑连接的无状态函数集合在一起,那么`module`就更合适了. (26认同)