Extension methods é uma funcionalidade bem legal mesmo. Apesar de eu não usar C#, já tirei proveito disso em Kotlin.
Em TypeScript, para adicionar propriedades ao prototype de algum objeto global sem abrir mão da tipagem, vc pode usar uma interface. Por exemplo:
interface String {
log(): void;
}
String.prototype.log = function () {
console.log(this);
};
const text = "JavaScript Extension methods";
text.log();
O ideal é mover a declaração da interface para um arquivo *.d.ts
para que a definição esteja disponível em qualquer módulo.