Dentro de las clases, un tipo especial llamado this
hace referencia de forma dinámica a la clase que lo utiliza.
class Caja {
contenido = "";
set(valor: string) {
this.contenido = valor;
return this;
}
}
const miCaja: Caja = new Caja();
const valorRetornado = miCaja.set("Joyas");
// const valorRetornado: Caja
El tipo de
valorRetornado
es inferido por TypeScript a partir de la referenciathis
que retorna la funciónset
.
También es posible utilizar this
como anotación dentro de los parámetros.
class Caja {
contenido = "";
constructor(contenido: string) {
this.contenido = contenido;
}
igualQue(otro: this) {
return otro.contenido === this.contenido;
}
}
const caja1 = new Caja("joyas");
const caja2 = new Caja("joyas");
const caja3 = new Caja("maquillaje");
console.log(caja1.igualQue(caja2));
console.log(caja1.igualQue(caja3));
Salida…
true
false
Esto es diferente de escribir otro: Caja
si se tiene una clase derivada, entonces igualQue
solo aceptara instancias derivadas de la misma clase.
class Caja {
contenido = "";
igualQue(otro: this) {
return this.contenido === otraInstancia.contenido;
}
}
class CajaDerivada extends Caja {
otroContenido = "";
}
const base = new Caja();
const derivada = new CajaDerivada();
derivada.igualQue(base); // <- base no extiende de derivada, esto generará un error
// Argument of type 'Caja' is not assignable to parameter of type 'CajaDerivada'.