Reputation: 66981
I'm in the process of migrating a large codebase to Typescript, but wanted to get a good handle on when & where I should be using certain things.
Right now I have some large namespaces in modules:
(function (nameSpace) {
var privateVariables = '';
function privateFunctions () { }
// Public methods
nameSpace.someMethodHere = function () { };
}(window.nameSpace = window.nameSpace || {}));
My question is in TypeScript, is there any difference / benefit in me just turning these into just Classes? Or should it just be one large Module with classes (each method) inside of it?
module nameSpace {
export class someMethodHere {
// etc
}
// more classes (my methods) here ??
}
-OR-
class nameSpace {
someMethodHere () {
// code
}
// more prototyped methods here
}
Or should I be setting them up in the same Module way I currently have? I was trying and it just kept giving me errors, not sure how I do nameSpace.someMethodHere
inside of a module without a class!
Upvotes: 23
Views: 15561
Reputation: 21309
Basically modules are good for packing all your code into one convenient global object while class are smart to structure your code and data representation.
[EDIT] The "internal modules" have been renamed "namespaces" moreover it is now discouraged to use namespaces when you can import modules. A namespace can be partial (i.e. described in many files) and while this is sometimes useful, this approach is too global to be optimised properly by the compiler. Read more here
Upvotes: 24
Reputation: 250932
It depends. A module should be a discrete set of "things" rather than just a jumbled collection of disparate classes, so if things seem like they belong together, use a module to group them.
I believe the TypeScript team is waiting to see how people use the language before they publish guidance, but I imagine people will publish a module where they currently publish a script - so jQuery would be a module, each jQuery Plugin would be a module, a testing framework would be a module, and an AOP framework would be a module - for example.
Upvotes: 12