Classes, this paramemeter (el parámetro this)

Dentro de un método o una función, un parámetro inicial llamado this tiene un significado especial en TypeScript. Estos parámetros son eliminados durante la compilación.

function miFuncion(this: string, x: number) {
    // ... codigo de la funcion
}

La anterior función es transformada al siguiente código JavaScript.

function miFuncion(x) {
    // codigo de la funcion
}

TypeScript verifica que la llamada a la función con el parámetro this se realice dentro de un contexto apropiado. En lugar de utilizar una arrow function (función tipo flecha), podemos agregar e parámetro this a las definiciones de los métodos para obligar a que estos métodos sean invocados de manera correcta.

class MiClase {
    nombre = "MiClase";

    getNombre(this: MiClase) {
        return this.nombre;
    }
}

const miClase: MiClase = new MiClase();
const r = miClase.getNombre(miClase);
console.log(r()); // <- esto generará un error

Error generado…

The 'this' context of type 'void' is not assignable to method's 'this' of type 'MiClase'

Este método toma un enfoque distinto al de los arrow functions.

  • Quienes invoquen el método de la clase de forma incorrecta pueden seguir haciéndolo sin darse cuenta.
  • Solo una función por clase es creada, en lugar de una clase por instancia.
  • La definición de los métodos base pueden seguir haciendo uso de super.