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
retirementAge
Person
Person
Para acessar este campo, utiliza-se o nome da classe:
console.log(Person.retirementAge);
Também foi definido um método estático calculateYears()
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
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);