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?
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
Vous devez vous connecter pour publier un commentaire.
Mettre en haut de votre fichier d'enregistrement de fichier
Ensuite utiliser globalAny à la place.
Retrait typings par coulée
any
vraiment va à l'encontre pourquoi la Machine est utilisée en premier lieu. Enfait si vous êtes peluchage TSLint a une option pour empêcher cela: palantir.github.io/tslint/règles/pas-toutOriginalL'auteur Steven Spungin
En plus d'autres réponses, vous pouvez aussi tout simplement cast
global
directement à la cession du site:OriginalL'auteur lleaff
J'ai résolu ce problème en faisant cela...
export interface Global extends NodeJS.Global
si vous souhaitez modifier certains mais de garder le reste de la Global des propriétés, commefetch
OriginalL'auteur Shawn
Essayé votre réponse, mais mondial.la fenêtre est toujours pas résolu
OriginalL'auteur Oleg Mikhailenko
Éviter typecasting
any
, il supprime le but de typings. Au lieu d'installer les définitions de type de besoin (par exemple,yarn add --dev @types/jsdom @types/node
) et de les importer à utiliser:OriginalL'auteur willsquire