gotchatypescriptCritical
Why does Typescript use the keyword "export" to make classes and interfaces public?
Viewed 0 times
typescriptwhyandusethepublicdoesexportclassesinterfaces
Problem
While dabbling with Typescript I realised my classes within modules (used as namespaces) were not available to other classes unless I wrote the
So now I can use the above code like this:
However I was just wondering why this keyword is used opposed to just using the
This would give resulting code like:
export keyword before them, such as:module some.namespace.here
{
export class SomeClass{..}
}So now I can use the above code like this:
var someVar = new some.namespace.here.SomeClass();However I was just wondering why this keyword is used opposed to just using the
public keyword which is used at method level to signify that a method or property should be externally accessible. So why not just use this same mechanism to make classes and interfaces etc externally visible?This would give resulting code like:
module some.namespace.here
{
public class SomeClass{..}
}Solution
The primary reason is that
In TypeScript, marking a class member as
With the
So conceptually, visibility as controlled by
export matches the plans for ECMAScript. You could argue that "they should have used "export" instead of "public", but asides from "export/private/protected" being a poorly matched set of access modifiers, I believe there is a subtle difference between the two that explains this.In TypeScript, marking a class member as
public or private has no effect on the generated JavaScript. It is simply a design / compile time tool that you can use to stop your TypeScript code accessing things it shouldn't.With the
export keyword, the JavaScript adds a line to add the exported item to the module. In your example: here.SomeClass = SomeClass;.So conceptually, visibility as controlled by
public and private is just for tooling, whereas the export keyword changes the output.Context
Stack Overflow Q#15760462, score: 196
Revisions (0)
No revisions yet.