何时在 TypeScript 中使用类与模块?
Posted
技术标签:
【中文标题】何时在 TypeScript 中使用类与模块?【英文标题】:When to use Classes vs Modules in TypeScript? 【发布时间】:2012-10-26 15:35:14 【问题描述】:我正在将一个大型代码库迁移到 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
!
【问题讨论】:
【参考方案1】: 考虑使用模块作为Singleton(一个可随处可访问的静态对象)的一个不错的选择,其中常见的用途是库。 当您需要创建此类的多个实例或计划扩展此类时,请考虑使用一个类。基本上,模块适合将所有代码打包到一个方便的全局对象中,而类则可以智能地构建代码和数据表示。
[EDIT] The "internal modules" have been renamed "namespaces" 此外,当您可以导入模块时,不鼓励使用命名空间。命名空间可以是部分的(即在许多文件中描述),虽然这有时很有用,但这种方法过于全局,无法被编译器正确优化。 Read more here
【讨论】:
这应该是公认的答案,因为它为单例和模块提供了明确的指导【参考方案2】:这取决于。一个模块应该是一组离散的“事物”,而不仅仅是杂乱无章的不同类的集合,所以如果事物看起来像是属于一起的,请使用模块将它们分组。
我相信 TypeScript 团队在发布指南之前正在等待看看人们如何使用该语言,但我想人们会在他们当前发布脚本的地方发布一个模块 - 所以 jQuery 将是一个模块,每个 jQuery 插件将是一个模块,一个测试框架就是一个模块,而一个 AOP 框架就是一个模块——例如。
【讨论】:
同意,好吧,它们都是相互关联的。我想现在我想起来了,我想知道......将所有内容都放在一个类(所有方法都被原型化)或一个模块中是否更有意义?我确实喜欢模块至少不必实例化 作为基线,如果您要拥有多个实例以及与每个实例关联的数据,那么class
是您的最佳选择。如果您只是将逻辑连接的无状态函数集组合在一起,module
更合适。
我 100% 同意 @RyanCavanaugh 的观点。
太棒了!在实现所有这些时,我肯定必须考虑哪些东西是无状态的。目前仍在升级/连接大量代码(许多具有不同风格的开发人员),然后才大刀阔斧地转向 Typescript。不过很兴奋。
当我想要一个单例时,我一直在类和模块上来回切换。该模块使得以单例方式公开通用特性变得更加容易,这类似于我们在 javascript 中使用模块和 IIFE 所获得的。这个类有很多额外的特性,但是很难创建私有成员。我目前在我的 TypeScript 课程中同时使用这两种技术,它们各有利弊。但目前我认为模块技术可能更符合我的个人喜好。以上是关于何时在 TypeScript 中使用类与模块?的主要内容,如果未能解决你的问题,请参考以下文章