Accessibility Modifiers
@ts-check
O JSDoc para TypeScript foi extendido para suportar
os modificadores de acesso nas propriedades das classes. Aqui estão eles:
@public - Padrão. É utilizado se não for definido um modificador.
@private - O campo somente pode ser acessado na mesma classe onde foi definido.
@protected - O campo é acessível para a classe onde foi definida e suas subclasses.
No exemplo temos a classe pai Animal, ela tem propriedades private e protected.
Subclasses podem acessar "this.isRapido" mas não podem acessar "this.type"
Fora dessa classes, ambos os campos não são visíveis e retornam um erro do compilador quando
@ts-check é ativado:
// Você pode ler mais no post abaixo:
https://devblogs.microsoft.com/typescript/announcing-typescript-3-8-beta/#jsdoc-modifiers
class Animal {
constructor(tipo) {
/** @private */
this.tipo = tipo;
/** @protected */
this.isRapido = tipo === "leopardo";
}
fazerBarulho() {
// Supostamente são muito silenciosos
if (this.tipo === "tigre") {
console.log("tigre");
} else {
throw new Error("fazerBarulho foi invocado na classe pai");
}
}
}
class Gato extends Animal {
constructor(tipo) {
super(tipo || "gato");
}
fazerBarulho() {
console.log("miau");
}
fugir() {
if (this.isRapido) {
console.log("Fugiu");
} else {
console.log("Não conseguiu fugir");
}
}
}
class Leopardo extends Gato {
constructor() {
super("leopardo");
}
}
class Tigre extends Gato {
constructor() {
super("tigre");
}
}
const gato = new Gato();
gato.fazerBarulho();
// Essas propriedades não são acessíveis
gato.type;
gato.isFast;