Tu función JavaScript está llena de errores por falta de tipado, y no te das cuenta hasta que es demasiado tarde.

El truco

Antes (JavaScript descontrolado):

function calcularArea(rectangulo) {
  return rectangulo.lado1 * rectangulo.lado2;
}

console.log(calcularArea({ lado1: 5 })); // NaN

Después (TypeScript al rescate):

interface Rectangulo {
  lado1: number;
  lado2: number;
}

function calcularArea(rectangulo: Rectangulo): number {
  return rectangulo.lado1 * rectangulo.lado2;
}

// TypeScript te avisa: Argument of type '{ lado1: number; }' is not assignable to parameter of type 'Rectangulo'.

TypeScript te fuerza a definir estructuras claras con interfaces. Al definir Rectangulo, ahora es obligatorio que los objetos pasados a calcularArea tengan lado1 y lado2, ambos de tipo number. Si intentas usar un objeto incompleto, TypeScript te avisa antes de que el código se ejecute, evitando un posible NaN en tiempo de ejecución.

Convertir tu JavaScript en TypeScript es más sencillo de lo que parece y puede ahorrarte muchos dolores de cabeza.