alleen maar class zichtbaar in module: typoscript

stemmen
9

Neem een ​​kijkje op de volgende code:

module MyModule {
    class MyPrivateClass {
        ...
    }

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

Ik wil MyPrivateClass alleen zichtbaar in zijn MyModule , specifiek voor intern gebruik in MyPublicClass . Buiten MyModule , alleen MyPublicClass moet zichtbaar zijn. Ik dacht dat de bovenstaande lay-out zou moeten doen, maar VS klaagt dat MyPrivateClass niet zichtbaar is binnen MyPublicClass . Het toevoegen van export voor de definitie van MyPrivateClass maakt het zichtbaar voor MyPublicClass maar dan is het ook van buitenaf zichtbaar is.

Is er een manier om het zichtbaar te maken MyPublicClass alleen?

Dank je.

De vraag is gesteld op 08/10/2012 om 13:28
bron van user
In andere talen...                            


4 antwoorden

stemmen
7

Hier is een werkende voorbeeld dat de privé-klasse, de public class toont, met behulp van de privé-klasse uit de public class en een poging om de prive-klasse, die een fout genereert gebruiken.

Als u nog steeds een foutmelding krijgt, bent u in staat om de naam die u probeert te gebruiken voor de module die het probleem veroorzaakt bekend te maken?

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
antwoordde op 12/10/2012 om 17:32
bron van user

stemmen
2

Als je wilt dat het private in de emmitted javascript kunt u dit doen door het verplaatsen van de private clas bijvoorbeeld om in de module, maar niet in de kant van de geëxporteerde klasse.

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();
antwoordde op 03/01/2013 om 17:39
bron van user

stemmen
0

U zei in een van uw opmerkingen:

Het is vreemd: Als ik plak de code zoals hierboven beschreven (de jouwe of de mijne), is het prima. Maar zodra ik de naam van de module te installeren om haar echte naam, de fout beschreven I verschijnt

Dit klinkt zeer vergelijkbaar met een probleem dat ik heb meegemaakt. Werd veroorzaakt doordat ik had behulp van verschillende referentiewegen de modules importeren. Als gevolg daarvan in een module leden konden elkaar niet openen.

Het spijt me, maar ik kan niet meer details te herinneren en ik heb niet in staat om uw (of mijn) fout te reproduceren geweest. Dit is waarschijnlijk nutteloos, maar ik dacht dat ik mijn ervaring delen niettemin: Het mengen van referentie paden en modules lijkt zeer vreemde fouten veroorzaken.

Bovendien soms VisualStudio gedraagt ​​zich nogal vreemd. Ik ben momenteel bezig met een typoscript project samen met een vriend. De code wordt opgeslagen in een GitHub repo. We hebben allebei trok dezelfde versie. Ik werkte prima voor mij en werd besprenkeld met foutmeldingen voor hem. Hetzelfde besturingssysteem, dezelfde versie van Typescript, dezelfde versie van VisualStudio, ... Interessant is dat de fout was in verband met modules, ook. Een module die werd ingevoerd leek "leeg" te zijn. Alle code die probeerde om de inhoud van deze module is rood gemarkeerd. Hij hernieuwd VisualStudio en alle van een plotselinge, de code werd geaccepteerd als geldig. We hebben niets veranderen! Het gecompileerd zonder problemen, ook.

antwoordde op 19/01/2013 om 13:15
bron van user

stemmen
0

Hmm, ik heb geen problemen te zien met het, maar vergeet niet om de waarde van het veld te initialiseren, anders zal de compiler niet het veld op te wekken:

module MyModule {
    class MyPrivateClass {

    }

    export class MyPublicClass {
        private instance: MyPrivateClass; // MyPrivateClass is unknown
        constructor() {
           this.instance = new MyPrivateClass();
        }
    }
}
antwoordde op 08/10/2012 om 13:40
bron van user

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