2016-11-22 11 views
6

Próbuję przekonwertować istniejący projekt na Maszynopis i mam problemy z moim testowaniem.Jak zapobiec "Property" ... "nie istnieje na typ" Global "" z jsdom i maszynopis?

Miałem plik instalacyjny dla moich testów, który konfiguruje jsdom tak, że cały mój kod interakcji DOM działa podczas moich testów. Korzystanie maszynopis (TS-węzeł z mocha) Ja zawsze pojawiają się błędy tak:

Property 'window' does not exist on type 'Global'. 

Aby to próbowałem łatanie NodeJS.Global interfejs jak tego uniknąć:

declare namespace NodeJS{ 
    interface Global { 
    document: Document; 
    window: Window; 
    navigator: Navigator; 
    } 
} 

Ale to nie zmienił byle co.

Jak włączyć te właściwości przeglądarki w globalnej zmiennej NodeJS?

Dodatki:

To mój mocha setup.ts:

import { jsdom, changeURL } from 'jsdom'; 

const exposedProperties = ['window', 'navigator', 'document']; 

global.document = jsdom(''); 
global.window = global.document.defaultView; 
Object.keys(global.document.defaultView).forEach((property) => { 
    if (typeof global[property] === 'undefined') { 
    exposedProperties.push(property); 
    global[property] = global.document.defaultView[property]; 
    } 
}); 

global.navigator = { 
    userAgent: 'node.js', 
}; 

changeURL(global.window, 'http://example.com/'); 
+0

nie może być pewien, że jest to prawidłowa odpowiedź, ale po przejściu przez podobny ból, okazuje się, że plik wewnątrz rozszerzenie interfejsu NodeJS.Global musi być pisane małymi literami, a typy będą ignorować. Ponadto nie może zawierać żadnych instrukcji importowania ani eksportowania u góry - lub będzie postrzegany jako moduł, a nie jako plik typowania. – Izhaki

Odpowiedz

6

Put to u góry pliku maszynopis

const globalAny:any = global; 

następnie wykorzystać globalAny zamiast.

globalAny.document = jsdom(''); 
globalAny.window = global.document.defaultView; 
+0

Uderzyłem w głowę tak długo, a potem mnie uratowałeś. Dzięki –

2
declare namespace NodeJS { 
    export interface Global { window: any; 
    } 
} 
+8

odpowiedzi tylko na kod niewiele robią, aby kształcić SO. Zmodyfikuj swoją odpowiedź, dodając wyjaśnienie. Twoja odpowiedź znajduje się w kolejce moderacji, ponieważ została oznaczona jako niskiej jakości. – mickmackusa

4

naprawiłem ten problem w ten sposób ...

export interface Global { 
    document: Document; 
    window: Window; 
} 

declare var global: Global;