Atualizado: 21/06/2025

Este conteúdo é original e não foi gerado por inteligência artificial.

Modificadores de Acesso em TypeScript

Os modificadores de acesso permitem ocultar o estado de um objeto do acesso externo e gerenciar o acesso a esse estado. No TypeScript, existem três modificadores: public, protected e private.

Se nenhum modificador for aplicado às propriedades e métodos das classes, essas propriedades e métodos são considerados como se fossem definidos com o modificador public. Ou seja, a seguinte definição de classe:

class Person {
  name: string;
  year: number;
}

Será equivalente a:

class Person {
  public name: string;
  public year: number;
}

private

Se o modificador private for aplicado às propriedades e métodos, não será possível acessá-los de fora ao criar um objeto dessa classe.

Por exemplo, vamos criar uma classe com propriedades e métodos privados:

class Person {
  private _name: string;
  private _year: number;

  constructor(name: string, age: number) {
    this._name = name;
    this._year = this.setYear(age);
  }

  public print(): void {
    console.log(`Nome: ${this._name}  Ano de nascimento: ${this._year}`);
  }

  private setYear(age: number): number {
    return new Date().getFullYear() - age;
  }
}

let tom = new Person("Tom", 24);
tom.print();
// console.log(tom._name); // não é possível acessar, pois _name é private
// tom.setYear(45);        // não é possível acessar, pois o método é private

As duas propriedades _name e _year são declaradas com o modificador private, portanto, não podemos usá-las fora da classe, por exemplo, em console.log(tom._name). O mesmo se aplica ao método setYear(). Os demais métodos estão disponíveis.

protected

O modificador protected define campos e métodos que são visíveis apenas em classes derivadas, não podendo ser acessados de fora da classe:

class Person {
  protected name: string;
  private year: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.year = this.setYear(age);
  }

  protected printPerson(): void {
    console.log(`Nome: ${this.name}  Ano de nascimento: ${this.year}`);
  }

  private setYear(age: number): number {
    return new Date().getFullYear() - age;
  }
}

class Employee extends Person {
  protected company: string;

  constructor(name: string, age: number, company: string) {
    super(name, age);
    this.company = company;
  }

  public printEmployee(): void {
    // console.log("Year: " + this.year); // não disponível, pois year é private
    // this.setYear(25);                  // não disponível, pois setYear é private
    this.printPerson(); // disponível, pois printPerson é protected
    console.log(`Empresa: ${this.company}`);
  }
}

let sam = new Employee("Sam", 31, "Microsoft");
sam.printEmployee();

Na classe Employee, o campo name e o método printPerson() estão disponíveis, pois possuem o modificador protected. Porém, a propriedade privada year e o método privado setYear() não estão acessíveis.

Definindo campos através do construtor

O uso de modificadores nos parâmetros do construtor permite reduzir a quantidade de código escrita. Por exemplo, suponha que temos a seguinte classe:

class Person {
  private name: string;
  private age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  printPerson(): void {
    console.log(`Nome: ${this.name}  Idade: ${this.age}`);
  }
}

Essa classe é equivalente à seguinte:

class Person {
  constructor(private name: string, private age: number) {}

  printPerson(): void {
    console.log(`Nome: ${this.name}  Idade: ${this.age}`);
  }
}

Ao usar modificadores nos parâmetros do construtor, não precisamos mais criar explicitamente propriedades para esses parâmetros. As propriedades são criadas automaticamente, recebem o nome dos parâmetros e possuem os mesmos modificadores.

Da mesma forma, se quisermos tornar as propriedades públicas, devemos usar o modificador public:

class Person {
  constructor(public name: string, public age: number) {}

  printPerson(): void {
    console.log(`Nome: ${this.name}  Idade: ${this.age}`);
  }
}

Se for necessário tornar o campo somente leitura, adiciona-se o modificador readonly ao modificador de acesso:

class Person {
  constructor(private readonly name: string, private age: number) {}
}
Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com