En TypeScript, el const
palabra clave no se puede usar para declarar propiedades de clase. Al hacerlo, el compilador produce un error con "Un miembro de la clase no puede tener la palabra clave 'const'".
Necesito indicar claramente en el código que una propiedad no debe cambiarse. Quiero que el IDE o el compilador produzcan un error si intento asignar un nuevo valor a la propiedad una vez que se ha declarado. ¿Cómo logran esto?
Actualmente estoy usando una propiedad de solo lectura, pero soy nuevo en Typecript (y JavaScript) y me pregunto si hay una mejor manera:
get MY_CONSTANT():number {return 10};
Estoy usando el mecanografiado 1.8. Sugerencias?
PD: ahora estoy usando el mecanografiado 2.0.3, así que acepté la respuesta de David
fuente
export
palabra clave antesclass
ypublic static
antes de lareadonly
palabra clave. Ver aquí: stackoverflow.com/a/22993349export
(módulos externos) y lapublic
palabra clave no están relacionados con esta pregunta / respuesta, pero sobre el tema de lo explícito, personalmente me resulta extremadamente fácil decir que un miembro es público cuando la palabra clave no existe. No me molesto con eso por esa razón y porque agrega más ruido y no es necesario escribir. También hace que los miembros públicos sean más distintos de los marcados comoprivate
oprotected
. De todos modos, solo mi opinión :)static readonly myReadOnlyProperty
cuando se declara la clase conexport default class { ... }
? Probé this.myVar, self.myVar, estático, predeterminado ... no funciona ... (EDITAR: default.myVar parece ser la solución, pero recibo un error de tipo)Las constantes pueden declararse fuera de las clases y usarse dentro de su clase. De lo contrario, la
get
propiedad es una buena soluciónfuente
get
propiedad es muy apropiado en su casoexport const
y luego importarlo desde otro archivo. Sin embargo, sería bastante fácil de probar. Simplemente declare unconst
en un archivo e intente usarlo en otro sin exportar / importar, o usarlo desde la consola del navegador.Puede marcar propiedades con
readonly
modificador en su declaración:@ver libro de inmersión profunda TypeScript - Readonly
fuente
Angular 2 proporciona una característica muy agradable llamada como constantes opacas. Cree una clase y defina todas las constantes allí usando constantes opacas.
Inyectarlo en proveedores en app.module.ts
Podrá usarlo en todos los componentes.
EDITAR para Angular 4:
Para Angular 4, el nuevo concepto es Token de inyección y token opaco está en desuso en Angular 4.
El token de inyección agrega funcionalidades sobre tokens opacos, permite adjuntar información de tipo en el token a través de genéricos TypeScript, más tokens de inyección, elimina la necesidad de agregar @Inject
Código de ejemplo
Angular 2 usando tokens opacos
Angular 4 usando fichas de inyección
Los tokens de inyección están diseñados lógicamente en la parte superior de los tokens opacos y los tokens opacos están en desuso en Angular 4.
fuente
Utilice el modificador readOnly con la constante que necesita declarar o puede declarar una constante fuera de la clase y úsela específicamente solo en la clase requerida usando el operador get.
fuente
Para esto puedes usar el
readonly
modificador. Las propiedades del objeto quereadonly
solo se pueden asignar durante la inicialización del objeto.Ejemplo en clases:
Ejemplo en literales de objeto:
También vale la pena saber que el
readonly
modificador es puramente una construcción mecanografiada y cuando el TS se compila a JS, la construcción no estará presente en el JS compilado. Cuando estamos modificando propiedades que son de solo lectura, el compilador de TS nos advertirá al respecto (es JS válido).fuente
Para mí, ninguna de las respuestas anteriores funciona. Necesitaba convertir mi clase estática a enum. Me gusta esto:
Luego, en mi componente, agrego una nueva propiedad como se sugiere en otras respuestas
Luego, en la plantilla de mi componente, la uso de esta manera
EDITAR: Lo siento. Mi problema era diferente al de los OP. Todavía dejo esto aquí si alguien tiene el mismo problema que yo.
fuente