tylko zrobić klasa widoczny moduł wewnątrz: maszynopis

głosy
9

Rzucić okiem na poniższy kod:

module MyModule {
    class MyPrivateClass {
        ...
    }

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

Chcę MyPrivateClass być widoczne tylko wewnątrz mymodule , specjalnie do użytku wewnętrznego MyPublicClass . Poza mymodule tylko MyPublicClass powinny być widoczne. Pomyślałem, że powyższy układ powinien zrobić, ale VS narzeka, że MyPrivateClass nie jest widoczny wewnątrz MyPublicClass . Dodawanie eksport przed definicja MyPrivateClass sprawia, że widoczne MyPublicClass ale wtedy jest to również widoczne z zewnątrz.

Czy istnieje sposób, aby był on widoczny na MyPublicClass tylko?

Dziękuję Ci.

Utwórz 08/10/2012 o 13:28
źródło użytkownik
W innych językach...                            


4 odpowiedzi

głosy
7

Oto przykład, który pokazuje pracę klasę prywatnych, klasy społecznej, przy użyciu klasy prywatnej z klasy publicznej i próbuje użyć klasy prywatnego, który generuje błąd.

Jeśli nadal pojawia się błąd, jesteś w stanie ujawnić nazwę próbujesz użyć do modułu, który powoduje ten problem?

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
Odpowiedział 12/10/2012 o 17:32
źródło użytkownik

głosy
2

Jeśli ma to być prywatna w emmitted JavaScript można to zrobić poprzez przeniesienie instancji prywatnych Clas do wewnątrz modułu, ale nie w eksportowane klasa stronie.

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();
Odpowiedział 03/01/2013 o 17:39
źródło użytkownik

głosy
0

Mówiłeś, że w jednym ze swoich komentarzy:

To dziwne: Gdybym wkleić kod jak wyżej (własnym lub kopalnia), to jest w porządku. Ale jak tylko zmienić nazwę modułu do jego prawdziwego imienia, błąd pojawi opisałem

To brzmi bardzo podobny do problemu ja doświadczyłem. Spowodowane to było dlatego, że wykorzystywane są różne ścieżki odniesienia importowania modułów. W rezultacie wewnątrz członków moduł nie może uzyskać dostępu do siebie.

Przykro mi, ale nie mogę sobie przypomnieć żadnych więcej szczegółów i nie byłem w stanie odtworzyć swoje (albo mój błąd). Prawdopodobnie jest to bezużyteczne, ale myślałem, że chciałbym podzielić się moim doświadczeniem jednak: Miksowanie ścieżek referencyjnych oraz modułów wydaje się bardzo dziwne powodować błędy.

Ponadto czasami VisualStudio zachowuje się raczej dziwne. Obecnie pracuję nad projektem maszynopis wraz z przyjacielem. Kod jest przechowywany w repo github. Oboje wyciągnął tę samą wersję. I pracował dobrze dla mnie i posypane komunikatów o błędach dla niego. Sam OS, sama wersja maszynopis, samej wersji VisualStudio ... Co ciekawe, błąd był związany z modułów, too. Moduł, który został przywieziony wydawała się być „pusta”. Cały kod, który próbował wykorzystać treść tego modułu został oznaczony na czerwono. On wznowiona VisualStudio i nagle, kod został przyjęty jako ważny. My niczego nie zmieni! To skompilowany bez problemów też.

Odpowiedział 19/01/2013 o 13:15
źródło użytkownik

głosy
0

Hmm, nie widzę żadnych problemów z nim, ale nie zapomnij, aby zainicjować wartości pola, inaczej kompilator nie wygeneruje pole:

module MyModule {
    class MyPrivateClass {

    }

    export class MyPublicClass {
        private instance: MyPrivateClass; // MyPrivateClass is unknown
        constructor() {
           this.instance = new MyPrivateClass();
        }
    }
}
Odpowiedział 08/10/2012 o 13:40
źródło użytkownik

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