Pesquisa de site

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 em

this.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)

Artigos relacionados