único módulo en el interior visible que la clase: mecanografiado

votos
9

Echar un vistazo al siguiente código:

module MyModule {
    class MyPrivateClass {
        ...
    }

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

Quiero MyPrivateClass sea solamente visible en el interior MyModule , específicamente para uso interno en MyPublicClass . Fuera MyModule , solamente MyPublicClass debe ser visible. Supuse que la disposición anterior debe hacer, pero se queja de que VS MyPrivateClass no es visible en el interior MyPublicClass . La adición de exportación antes de la definición de MyPrivateClass hace que sea visible para MyPublicClass pero luego también es visible desde el exterior.

¿Hay alguna forma para que sea visible a MyPublicClass solo?

Gracias.

Publicado el 08/10/2012 a las 13:28
fuente por usuario
En otros idiomas...                            


4 respuestas

votos
7

Aquí está un ejemplo que muestra la clase privada, la clase pública, utilizando la clase privada de la clase pública y de intentar utilizar la clase privada, lo que genera un error.

Si continúa recibiendo un error, que son capaces de revelar el nombre que está intentando utilizar para el módulo que causa el problema?

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
Respondida el 12/10/2012 a las 17:32
fuente por usuario

votos
2

Si usted quiere que sea privado en el emmitted JavaScript que puede hacer esto mediante el movimiento de la instancia clas privados para el interior del módulo, pero no en el lado de la clase exportado.

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();
Respondida el 03/01/2013 a las 17:39
fuente por usuario

votos
0

Usted dijo en uno de sus comentarios:

Es extraño: Si me pega el código que el anterior (el suyo o el mío), que está bien. Pero tan pronto como puedo cambiar el nombre del módulo a su nombre real, el error que aparece descrita

Esto suena muy similar a un problema que he experimentado. Fue causado porque había estado utilizando diversas rutas de referencia para importar los módulos. Como resultado de ello dentro de un módulo miembros no podían acceder unos a otros.

Lo siento, pero no puedo recordar más detalles y no he sido capaz de reproducir su (o mi) de error. Esta es probablemente inútil, pero pensé que iba a compartir mi experiencia, sin embargo: Mezcla de caminos y módulos de referencia parece ser la causa errores muy extraños.

Por otra parte VisualStudio veces se comporta más bien raro. Actualmente estoy trabajando en un proyecto mecanografiado junto con un amigo. El código se almacena en un acuerdo de recompra GitHub. Los dos nos detuvimos la misma versión. He trabajado muy bien para mí y fue rociada con mensajes de error para él. Mismo sistema operativo, misma versión de imprenta, misma versión de VisualStudio, ... Es interesante que el error estaba relacionado con los módulos, también. Un módulo que se importó parecía estar "vacío". Todo el código que trató de usar el contenido de este módulo fue marcado en rojo. Se reinicia VisualStudio y, de repente, el código fue aceptado como válido. No hemos cambiado nada! Se compila sin problemas, también.

Respondida el 19/01/2013 a las 13:15
fuente por usuario

votos
0

Hmm, no veo ningún problema con él, pero no se olvide de inicializar el valor del campo, de lo contrario el compilador no generará el campo:

module MyModule {
    class MyPrivateClass {

    }

    export class MyPublicClass {
        private instance: MyPrivateClass; // MyPrivateClass is unknown
        constructor() {
           this.instance = new MyPrivateClass();
        }
    }
}
Respondida el 08/10/2012 a las 13:40
fuente por usuario

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