Classes, this runtime behavior (comportamiento de this en tiempo de ejecución)

Es importante recordar que TypeScript no cambia el valor en tiempo de ejecución de JavaScript, y que JavaScript es en cierta forma famoso por tener ciertas particularidades en su comportamiento.

Un ejemplo de esto es el valor o la referencia de this según donde este se utilice…

class MiClase {
    nombre = "MiClase";

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

const miClase: MiClase = new MiClase();

const obj: MiClase = {
    nombre: "obj",
    getNombre: miClase.getNombre,
};

console.log(obj.getNombre()); // <- la salida será obj

Salida

obj

La razón del porque el valor retornado no es “MiClase” se debe a que this dentro de una función depende de como la función es invocada. En este ejemplo, debido a que la función es invocada dentro de un objeto, esta hace referencia a a propiedad nombre de dicho objeto cuyo valor es obj.

Esto rara ocasión es lo que se desea, y TypeScript intenta mitigar este tipo de comportamientos en la medida de lo posible.