Comment éviter la “Propriété " ... "n'existe pas sur le type" Global” avec jsdom et tapuscrit?

J'essaie de convertir un projet existant pour utiliser la Machine et j'ai des problèmes avec mes tests de l'installation.

J'ai eu un fichier de configuration pour mes tests, qui met en place jsdom de sorte que tous mes DOM interaction code fonctionne pendant mes tests. À l'aide de la Machine (ts-nœud avec moka) je reçois toujours des erreurs de ce type:

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

Pour éviter cela j'ai essayé de patcher le NodeJS.Global interface comme ceci:

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

Mais cela n'a rien changé.

Comment puis-je activer les propriétés du navigateur sur le NodeJS variable globale?

Extras:

C'est mon moka 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/');
Ne peut pas être sûr que c'est la bonne réponse, mais ayant vécu la même douleur, il s'avère que le fichier dans lequel vous étendez la NodeJS.Interface globale doivent être en minuscules ou typings va l'ignorer. Aussi, il ne peut pas avoir d'exportation ou d'importation des déclarations au sommet - ou il est considéré comme un module plutôt qu'un typings fichier.
aucune de ces réponses semblent fonctionner, quelqu'un a une réponse en 2018?
Ajout d'une réponse ci-dessous, j'espère que ça aide?

OriginalL'auteur fahrradflucht | 2016-11-22