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?