readonlyarray overload typescript module public access-modifiers

overload - typescript templates



¿Por qué Typescript utiliza la palabra clave "export" para hacer que las clases y las interfaces sean públicas? (2)

Algunas cosas para agregar a la respuesta de Steve Fenton:

  • export ya significa dos cosas diferentes (dependiendo de si está en el nivel superior o no); lo que significa que un tercero es probablemente peor que agregar public / private
  • Definitivamente no es para facilitar la implementación; la complejidad añadida de public vs export es trivial. Ya hemos cambiado las palabras clave de un grupo; no es dificil.
  • La visibilidad predeterminada de los miembros de la clase debe ser pública para alinearse con la propuesta de la clase ES6, por lo tanto, necesitamos alguna palabra clave para indicar "no pública". No hay un antónimo adecuado para export (¿no?), Por lo que la elección lógica es private . Una vez que tenga private , sería un poco loco no elegir public como su contraparte
  • El uso de export para modificar la visibilidad en los módulos internos es la mejor alineación con los módulos ES6

Mientras incursioné con Typescript me di cuenta de que mis clases dentro de módulos (usadas como espacios de nombres) no estaban disponibles para otras clases a menos que escribiera la palabra clave export antes de ellas, como por ejemplo:

module some.namespace.here { export class SomeClass{..} }

Así que ahora puedo usar el código anterior de esta manera:

var someVar = new some.namespace.here.SomeClass();

Sin embargo, me preguntaba por qué se usa esta palabra clave en lugar de simplemente usar la palabra clave public que se utiliza a nivel de método para indicar que un método o propiedad debe ser accesible externamente. Entonces, ¿por qué no simplemente usar este mismo mecanismo para hacer que las clases e interfaces, etc. sean visibles externamente?

Esto daría el código resultante como:

module some.namespace.here { public class SomeClass{..} }


La razón principal es que la export coincide con los planes para ECMAScript. Se podría argumentar que "deberían haber usado" exportar "en lugar de" público ", pero aparte de" exportar / proteger / proteger "siendo un conjunto de modificadores de acceso pobremente emparejados, creo que hay una sutil diferencia entre los dos que explica esto. .

En TypeScript, marcar a un miembro de la clase como public o private no tiene ningún efecto en el JavaScript generado. Es simplemente una herramienta de tiempo de diseño / compilación que puede usar para evitar que su código TypeScript acceda a cosas que no debería.

Con la palabra clave export , el JavaScript agrega una línea para agregar el elemento exportado al módulo. En su ejemplo: here.SomeClass = SomeClass; .

Así que, conceptualmente, la visibilidad controlada por public y private es solo para herramientas, mientras que la palabra clave de export cambia la salida.