constantes - Por que não podemos definir um campo const em uma classe TypeScript, e por que static readonly não está funcionando?
Eu quero usar a palavra-chave const no meu programa.
export class Constant {
let result : string;
private const CONSTANT = 'constant'; //Error: A class member cannot have the const keyword.
constructor () {}
public doSomething () {
if (condition is true) {
//do the needful
}
else
{
this.result = this.CONSTANT; // NO ERROR
}
}
}
Pergunta1: por que o membro da classe não tem a palavra-chave const em TypeScript?
Question2: Quando eu uso
static readonly CONSTANT = 'constant';
e atribuí-lo em
this.result = this.CONSTANT;
Ele exibe erro. Por que isso?
Eu segui este post Como implementar constantes de classe em TypeScript? mas não entendi a resposta de por que o TypeScript está exibindo esse tipo de erro com a palavra-chave const.
Resposta #1
Pergunta1: por que o membro da classe não tem a palavra-chave const em TypeScript?
Por design. Entre outras razões, porque o EcmaScript6 também não.
Esta questão é especificamente respondida aqui: palavra-chave 'const' em TypeScript
Pergunta2: Quando eu uso
static readonly CONSTANTE='constante';e atribuí-la emthis.result = this.CONSTANT;Ele exibe erro. Por que isso?
Se você usar static, então você não pode se referir à sua variável com this, mas com o nome da classe !
export class Constant{
let result : string;
static readonly CONSTANT = 'constant';
constructor(){}
public doSomething(){
if( condition is true){
//do the needful
}
else
{
this.result = Constant.CONSTANT;
}
}
}
Por quê? Porque this se refere à instância da classe à qual o campo/método pertence. Para uma variável/método estático, ele não pertence a nenhuma instância, mas sim à própria classe (resumidamente)
