Definir función global en módulo

Aug 30 2020

Puedo definir una función global en un archivo que no es un módulo:

foo.ts:

function foo() {}

Puedo llamar a esa función desde un archivo bar.ts sin importar foo.ts:

bar.ts:

foo(); // call global function foo

Sin embargo, tan pronto como importo otro módulo a foo.ts, foo.ts se convierte en un módulo y la definición global desaparece. Dando como resultado un error en bar.ts al intentar llamar a foo.

¿Cómo puedo definir una función global en un módulo que es global en todo el proyecto sin importarlo?

EDITAR:

Conozco la declare globalsintaxis, pero en ese caso necesitaría escribir cada firma de función dos veces: una vez para declararla globalmente y otra para vincularla globalThis. Estoy buscando algo con menos repetición.

Respuestas

user3612643 Sep 03 2020 at 16:32

Parece que declare globales realmente necesario en tal caso. La única solución (detallada) que encontré es:

declare global {
  function foo(): void;
}

globalThis.foo = () => {};