No TypeScript, a const
palavra - chave não pode ser usada para declarar propriedades da classe. Fazer isso causa um erro no compilador com "Um membro da classe não pode ter a palavra-chave 'const'".
Sinto-me na necessidade de indicar claramente no código que uma propriedade não deve ser alterada. Quero que o IDE ou o compilador tenha erro se tentar atribuir um novo valor à propriedade depois que ela for declarada. Como vocês conseguem isso?
Atualmente, estou usando uma propriedade somente leitura, mas sou novo no Typescript (e JavaScript) e me pergunto se existe uma maneira melhor:
get MY_CONSTANT():number {return 10};
Estou usando o texto datilografado 1.8. Sugestões?
PS: Agora estou usando o texto datilografado 2.0.3, então aceitei a resposta de David
fonte
export
palavra - chave antesclass
epublic static
antes dareadonly
palavra - chave. Veja aqui: stackoverflow.com/a/22993349export
(módulos externos) e apublic
palavra - chave não estão relacionados a essa pergunta / resposta, mas no tópico explicitação, pessoalmente, acho extremamente fácil dizer que um membro é público quando a palavra-chave não existe. Eu não me importo com isso por esse motivo e porque adiciona mais ruído e é desnecessário digitar. Também torna os membros públicos mais distintos daqueles marcados comoprivate
ouprotected
. De qualquer forma, apenas a minha opinião :)static readonly myReadOnlyProperty
quando a classe é declaradaexport default class { ... }
? Tentou this.myVar, self.myVar, estático, padrão ... não funciona ... (EDIT: default.myVar parece ser a solução, mas eu estou recebendo um erro de tipo)As constantes podem ser declaradas fora das classes e usadas dentro da sua classe. Caso contrário, a
get
propriedade é uma boa solução alternativafonte
get
propriedade muito apropriado no seu casoexport const
e importá-lo de outro arquivo. Seria muito fácil testar, no entanto. Apenas declare umconst
em um arquivo e tente usá-lo em outro sem exportar / importar ou usá-lo no console do navegador.Você pode marcar propriedades com
readonly
modificador na sua declaração:@see livro TypeScript Deep Dive - Readonly
fonte
Angular 2 Fornece um recurso muito interessante chamado Constantes Opacas. Crie uma classe e defina todas as constantes lá usando constantes opacas.
Injete-o em provedores em app.module.ts
Você poderá usá-lo em todos os componentes.
EDIT para Angular 4:
Para o Angular 4, o novo conceito é Token de injeção e o token opaco foi preterido no Angular 4.
Token de injeção Adiciona funcionalidades sobre os Tokens opacos, permite anexar informações de tipo no token via genéricos TypeScript, além de tokens de injeção, elimina a necessidade de adicionar @Inject
Código de exemplo
Angular 2 usando tokens opacos
Angular 4 usando tokens de injeção
Os tokens de injeção são projetados logicamente em cima de tokens opacos e os tokens opacos são descontinuados no Angular 4.
fonte
Use o modificador readOnly com a constante que precisa declarar ou se pode declarar uma constante fora da classe e use-a especificamente apenas na classe necessária, usando o operador get.
fonte
Para isso, você pode usar o
readonly
modificador. As propriedades do objeto que sãoreadonly
apenas podem ser atribuídas durante a inicialização do objeto.Exemplo nas classes:
Exemplo em literais de objeto:
Também vale a pena saber que o
readonly
modificador é puramente uma construção datilografada e quando o TS for compilado para JS, a construção não estará presente no JS compilado. Quando estamos modificando propriedades que são somente leitura, o compilador TS nos avisa sobre isso (é JS válido).fonte
Para mim, nenhuma das respostas anteriores funciona. Eu precisava converter minha classe estática em enum. Como isso:
Então, no meu componente, adiciono nova propriedade, conforme sugerido em outras respostas
Em seguida, no modelo do meu componente, eu o uso dessa maneira
EDIT: Desculpe. Meu problema era diferente do do OP. Ainda deixo isso aqui se alguém tiver o mesmo problema que eu.
fonte