TypeScript: gör klassen synlig endast inom modulen
Ta en titt på följande kod:
module MyModule {
class MyPrivateClass {
...
}
export class MyPublicClass {
private var: MyPrivateClass; // MyPrivateClass is unknown
}
}
Jag vill att MyPrivateClass endast ska vara synlig inne i MyModule, specifikt för internt bruk i MyPublicClass. Utanför MyModule bör endast MyPublicClass vara synlig. Jag tänkte att ovanstående layout borde fungera men VS klagar på att MyPrivateClass inte är synlig inne i MyPublicClass. Att lägga till export före definitionen av MyPrivateClass gör den synlig för MyPublicClass men då blir den också synlig utifrån.
Finns det ett sätt att göra det synligt endast för MyPublicClass?
Tack.
Svar #1
Här är ett fungerande exempel som visar den privata klassen, den publika klassen, hur den privata klassen används från den publika klassen och försök att använda den privata klassen, vilket genererar ett fel.
Om du fortfarande får ett fel, kan du då avslöja namnet du försöker använda för modulen som orsakar problemet?
module MyModule {
class MyPrivateClass {
doSomething() {
return 1;
}
}
export class MyPublicClass {
private x = new MyPrivateClass();
someFunction() {
return this.x.doSomething();
}
}
}
var examplePublic = new MyModule.MyPublicClass();
var result = examplePublic.someFunction(); // 1
var examplePrivate = new MyModule.MyPrivateClass(); // error
Svar #2
Om du vill att det ska vara privat i den emitterade JavaScript kan du göra detta genom att flytta den privata klassinstansen till insidan av modulen, men inte inuti den exporterade klassen.
module MyModule {
class MyPrivateClass {
prop1: number = 1;
}
var foo: MyPrivateClass = new MyPrivateClass();
export class MyPublicClass {
someMethod(){
var bar = foo.prop1;
}
}
}
var x = new MyModule.MyPublicClass();
