Estendendo a "Janela" dentro de um módulo de texto datilografado

Se você estiver escrevendo em texto datilografado e não estiver usando módulos, é possível estender oWindow objeto. Por exemplo, isso compila:

interface Window {
    myCounter: number;
}

window.myCounter = window.myCounter || 0;
++window.myCounter;

function outputLoadingDetails() {
    console.log(`myCounter= ${window.myCounter}`)
}

Mas se eu prefixo a funçãooutputLoadingDetails comexport, parece que estou convertendo este arquivo em um módulo. Agora, recebo um erro do compilador ao acessarwindow.myCounter.

interface Window {
    myCounter: number;
}

window.myCounter = window.myCounter || 0; // ERROR: property 'MyCounter' does not exist on type `Window`
++window.myCounter;                       // ERROR: property 'MyCounter' does not exist on type `Window`

export function outputLoadingDetails() {
    console.log(`myCounter= ${window.myCounter}`)  // ERROR: property 'MyCounter' does not exist on type `Window`
}

Parece que minha declaração de interface não está mais estendendo o nível globalWindow tipo.

Uma solução alternativa que encontrei é colocar a declaração da interface em um separado*.d.ts arquivo e faça referência a isso no meu módulo.

Mas agora estou curioso. Existe alguma maneira de estender oWindow interface dentro do código do módulo?

questionAnswers(2)

yourAnswerToTheQuestion