Extender "Ventana" dentro de un módulo mecanografiado

Si está escribiendo en mecanografiado y no está utilizando módulos, es posible extender elWindow objeto. Por ejemplo, esto compila:

interface Window {
    myCounter: number;
}

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

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

Pero si prefijo la funciónoutputLoadingDetails conexport, parece que estoy convirtiendo este archivo en un módulo. Ahora obtengo un error de compilación cuando accedowindow.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 mi declaración de interfaz ya no está extendiendo el globalWindow tipo.

Una solución alternativa que he encontrado es poner la declaración de la interfaz en un*.d.ts y haga referencia a esto desde mi módulo.

Pero ahora tengo curiosidad. ¿Hay alguna manera de extender elWindow interfaz dentro del código del módulo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta