Definir função global no módulo

Aug 30 2020

Posso definir uma função global em um arquivo não módulo:

foo.ts:

function foo() {}

Posso chamar essa função de um arquivo bar.ts sem importar foo.ts:

bar.ts:

foo(); // call global function foo

No entanto, assim que eu importo outro módulo para foo.ts, foo.ts é transformado em um módulo e a definição global desaparece. Resultando em um erro em bar.ts ao tentar chamar foo.

Como posso definir uma função global em um módulo que é global em todo o projeto sem importá-lo.

EDITAR:

Eu sei sobre a declare globalsintaxe, mas nesse caso eu precisaria escrever cada assinatura de função duas vezes: uma para declará-la globalmente e uma vez para vinculá-la globalThis. Estou procurando algo com menos clichê.

Respostas

user3612643 Sep 03 2020 at 16:32

Parece que declare globalé realmente necessário nesse caso. A única solução (detalhada) que encontrei é:

declare global {
  function foo(): void;
}

globalThis.foo = () => {};