bare gjøre klasse synlig inne i modulen: script

stemmer
9

Ta en titt på følgende kode:

module MyModule {
    class MyPrivateClass {
        ...
    }

    export class MyPublicClass {
        private var: MyPrivateClass; // MyPrivateClass is unknown
    }
}

Jeg ønsker MyPrivateClass å være bare synlig inne MyModule , spesielt for intern bruk i MyPublicClass . Utenfor MyModule , bare MyPublicClass skal være synlig. Jeg skjønte at ovennevnte oppsettet skal gjøre, men VS klager at MyPrivateClass ikke er synlig inne MyPublicClass . Legge til eksport før definisjonen av MyPrivateClass gjør det synlig for MyPublicClass men da er det også synlig fra utsiden.

Er det en måte å gjøre det synlig for MyPublicClass bare?

Takk skal du ha.

Publisert på 08/10/2012 klokken 12:28
kilden bruker
På andre språk...                            


4 svar

stemmer
7

Her er en fungerende eksempel som viser privat klasse, offentlig klasse, ved hjelp av private klasse fra publikum klassen og prøver å bruke privat klasse, noe som genererer en feil.

Hvis du fortsatt får en feilmelding, kan du oppgi navnet du prøver å bruke for modulen som forårsaker 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
Svarte 12/10/2012 kl. 16:32
kilden bruker

stemmer
2

Hvis du vil at det skal være privat i emmitted Javascript kan du gjøre dette ved å flytte private clas forekomsten til inne i modulen, men ikke i siden eksporterte 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();
Svarte 03/01/2013 kl. 16:39
kilden bruker

stemmer
0

Du sa i en av dine kommentarer:

Det er rart: Hvis jeg lime inn koden som ovenfor (din egen eller mine), er det fint. Men så snart jeg endre navnet på modulen til sitt virkelige navn, feilen jeg beskrev vises

Dette høres veldig likt et problem jeg har opplevd. Det ble forårsaket fordi jeg hadde vært anvendelse av forskjellige referanse baner for å importere modulene. Som et resultat i en modul medlemmer får ikke tilgang hverandre.

Jeg beklager, men jeg kan ikke huske noen flere detaljer, og jeg har ikke vært i stand til å reprodusere din (eller min) feil. Dette er sannsynligvis ubrukelig, men jeg tenkte jeg skulle dele min erfaring likevel: Blanding referanse stier og moduler ser ut til å forårsake svært merkelige feil.

Videre iblant Visual Studio oppfører seg ganske rart. Jeg jobber for tiden med et maskinskrevet manuskript prosjekt sammen med en venn. Koden er lagret i en github repo. Vi begge trakk den samme versjonen. Jeg fungerte fint for meg og var overstrødd med feilmeldinger for ham. Samme OS, samme versjon av maskinskrevet manuskript, samme versjon av Visual Studio, ... Interessant feilen var relatert til moduler, også. En modul som ble importert syntes å være "tom". All kode som prøvde å bruke innholdet i denne modulen ble markert rødt. Han startet Visual Studio og plutselig, koden ble akseptert som gyldig. Vi gjorde ikke endre noe! Det kompilert uten problemer, også.

Svarte 19/01/2013 kl. 12:15
kilden bruker

stemmer
0

Hmm, ser jeg ikke noen problemer med det, men ikke glem å initialisere feltverdi, ellers kompilatoren vil ikke generere start:

module MyModule {
    class MyPrivateClass {

    }

    export class MyPublicClass {
        private instance: MyPrivateClass; // MyPrivateClass is unknown
        constructor() {
           this.instance = new MyPrivateClass();
        }
    }
}
Svarte 08/10/2012 kl. 12:40
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more