Campos e Métodos Estáticos - TypeScript

Além dos campos e métodos comuns, uma classe pode ter campos e métodos estáticos. Campos e métodos estáticos não se referem a objetos individuais, mas à classe como um todo. Para acessar campos e métodos estáticos, utiliza-se o nome da classe.

Campos e métodos estáticos são definidos usando a palavra-chave static:

class Person {
  
    age: number;
    name: string;
     
    static retirementAge: number = 65;
    static calculateYears(age: number): number {
        return Person.retirementAge - age;
    }
     
    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }
}
 
let tom = new Person("Tom", 36);
let years = Person.calculateYears(36);
console.log(Person.retirementAge);
console.log(`Years until retirement: ${years} years`);

Neste exemplo, a classe Person define um campo estático retirementAge, que armazena a idade de aposentadoria para objetos Person. Como essa propriedade é comum a todos os objetos Person, faz sentido torná-la estática, ou seja, compartilhada por toda a classe.

Para acessar este campo, utiliza-se o nome da classe:

console.log(Person.retirementAge);

Também foi definido um método estático calculateYears(), que calcula o tempo restante até a aposentadoria (para simplificar, vamos supor que a idade fornecida é menor que a idade de aposentadoria). Da mesma forma, para chamar este método, usamos o nome da classe em vez do objeto:

let years = Person.calculateYears(36);

É importante notar que, em métodos estáticos, podemos acessar campos estáticos ou outros métodos estáticos da classe, mas não podemos acessar campos e métodos não estáticos nem usar a palavra-chave this. Por exemplo, no seguinte caso, encontraremos um erro de compilação:

static calculateYears(): number {
    return Person.retirementAge - this.age; // Erro: this.age refere-se a um campo não estático
}

Assim como campos e métodos comuns, campos e métodos estáticos podem ter modificadores de acesso:

class Person {
  
    age: number;
    name: string;
     
    private static retirementAge: number = 65;
    static calculateYears(age: number): number {
        return Person.retirementAge - age;
    }
     
    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }
}

Campos e métodos estáticos também podem ser herdados, o que permite acessá-los através do nome da classe derivada:

class Person {
  
    age: number;
    name: string;
     
    static retirementAge: number = 65;
    static calculateYears(age: number): number {
        return Person.retirementAge - age;
    }
     
    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }
}
class Employee extends Person {}

let years = Employee.calculateYears(36);
console.log(Employee.retirementAge);
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