Getters e Setters em TypeScript: guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Get e Set em TypeScript: a mágica dos accessors sem complicação

\n\n

Você já escreveu uma classe em TypeScript e pensou: "Queria que uma propriedade fosse inteligente, que ao ser lida ela calculasse algo e ao ser alterada ela validasse os dados"? Conheça os getters (get) e setters (set). Eles não são apenas açúcar sintático, mas uma ferramenta poderosa para controlar o acesso aos dados.

\n\n

Se você já pesquisou sobre o assunto no Stack Overflow, sabe que a pergunta "get and set in TypeScript" acumula milhares de visualizações. As pessoas se confundem sobre quando usar accessors e quando usar métodos comuns. Neste artigo, vamos organizar tudo: do básico aos detalhes mais sutis.

\n\n

Pronto? Vamos lá!

\n\n

O que são get e set em TypeScript?

\n\n

Um getter é um método chamado ao ler uma propriedade. Um setter é um método chamado ao atribuir um valor. Juntos, eles formam os accessors. A sintaxe parece que você está trabalhando com um campo comum, mas por baixo dos panos há lógica.

\n\n

Veja um exemplo mínimo:

\n\n
class User {\n  private _name: string = '';\n\n  get name(): string {\n    return this._name;\n  }\n\n  set name(value: string) {\n    if (value.length > 0) {\n      this._name = value;\n    } else {\n      console.log('O nome não pode ser vazio');\n    }\n  }\n}\n\nconst user = new User();\nuser.name = 'Ana'; // chama o set\nconsole.log(user.name); // chama o get → 'Ana'\nuser.name = ''; // tenta definir nome vazio → mensagem no console
\n\n

Observe: a propriedade _name com o prefixo _ é um campo privado. O acesso direto a ela de fora é impossível. Em vez disso, usamos o accessor público name.

\n\n

Por que usar getters e setters? 3 razões principais

\n\n

1. Validação de dados

\n

O setter é o local ideal para verificar valores de entrada. Você pode rejeitar dados inválidos antes que eles entrem no objeto.

\n\n
class Temperature {\n  private _celsius: number = 0;\n\n  get celsius(): number {\n    return this._celsius;\n  }\n\n  set celsius(value: number) {\n    if (value < -273.15) {\n      throw new Error('Temperatura abaixo do zero absoluto é impossível');\n    }\n    this._celsius = value;\n  }\n}
\n\n

2. Propriedades calculadas

\n

Um getter pode retornar não um valor armazenado, mas o resultado de cálculos baseados em outros dados.

\n\n
class Rectangle {\n  constructor(public width: number, public height: number) {}\n\n  get area(): number {\n    return this.width * this.height;\n  }\n\n  get perimeter(): number {\n    return 2 * (this.width + this.height);\n  }\n}\n\nconst rect = new Rectangle(10, 5);\nconsole.log(rect.area); // 50 — calculado na hora
\n\n

3. Encapsulamento e controle de acesso

\n

Você pode tornar uma propriedade somente leitura (apenas getter) ou somente escrita (apenas setter). Isso ajuda a seguir os princípios de POO.

\n\n
class Config {\n  private _apiKey: string = 'secret123';\n\n  get apiKey(): string {\n    // Pode adicionar logging ou verificação de permissões\n    return this._apiKey;\n  }\n  // Setter não definido — propriedade somente leitura\n}\n\nconst config = new Config();\nconsole.log(config.apiKey); // 'secret123'\n// config.apiKey = 'newKey'; // Erro de compilação!
\n\n

Perguntas frequentes sobre get e set em TypeScript

\n\n

Vamos abordar o que é mais perguntado por iniciantes (e não só) no Stack Overflow e fóruns.

\n\n

Pergunta 1: Qual a diferença entre get/set e métodos comuns?

\n

A principal diferença é a sintaxe de chamada. Accessors parecem propriedades: sem parênteses. Isso torna o código mais limpo e intuitivo. Compare:

\n\n
// Com métodos\nuser.getName();\nuser.setName('Pedro');\n\n// Com accessors\nuser.name;\nuser.name = 'Pedro';
\n\n

A segunda diferença é que accessors não podem ser sobrecarregados (overload). Cada accessor tem uma única assinatura.

Blogs

Book Recommendations