Métodos de Acesso get e set em TypeScript
No padrão JavaScript ECMAScript 5, foi introduzida a ideia de métodos de acesso: para acessar uma propriedade, define-se um par de métodos, get
para obter o valor da propriedade e set
para definir o valor. Essa é uma prática bastante comum, aplicada, por exemplo, em Java, onde para gerenciar o acesso a variáveis privadas cria-se um par de métodos get
e set
, ou em C#, onde para acessar variáveis privadas é criada uma propriedade com dois métodos, get
e set
.
Por exemplo, temos a seguinte classe:
class Person {
name: string;
age: number;
}
let tom = new Person();
tom.name = "Tom";
tom.age = -1243;
console.log(tom.age);
Aqui, ao campo age
, que representa a idade de uma pessoa, é atribuído um valor incorreto.
O uso de acessores ou métodos de acesso permite controlar como o valor é definido e como é retornado. Em particular, podemos reescrever a classe anterior usando acessores da seguinte forma:
class Person {
name: string;
private _age: number;
public get age(): number {
return this._age;
}
public set age(n: number) {
if (n < 0 || n > 110) {
console.log("Invalid age!");
} else {
this._age = n;
}
}
}
let tom = new Person();
tom.name = "Tom";
tom.age = 36;
console.log(tom.age); // 36
tom.age = -1243; // Invalid age!
console.log(tom.age); // 36
Os métodos de acesso são definidos como métodos comuns, com a diferença de que as palavras-chave get
e set
são colocadas antes deles. O método set
controla como o valor é atribuído, enquanto o método get
retorna o valor.
Nesse caso, tornamos a variável _age
privada, restringindo o acesso direto a ela. Agora, só é possível acessá-la por meio dos métodos de acesso. O método get
simplesmente retorna o valor da variável:
public get age(): number {
return this._age;
}
E o método set
define o valor de _age
, mas apenas se estiver dentro do intervalo correto.
Quando atribuímos um valor tom.age = 36;
o método set
é acionado.
Quando obtemos o valor console.log(tom.age);
o método get
é acionado.