我尝试将现有项目转换为使用Typescript,但是在测试设置中却遇到了问题。
我有一个用于测试的安装文件,该文件用于设置jsdom,以便我所有的DOM交互代码在测试期间均可工作。使用Typescript(带有摩卡的ts节点),我总是会收到这样的错误:
Property 'window' does not exist on type 'Global'.
为了防止这种情况,我尝试像这样修补NodeJS.Global接口:
declare namespace NodeJS{
interface Global {
document: Document;
window: Window;
navigator: Navigator;
}
}
但这并没有改变任何东西。
如何在NodeJS全局变量上启用这些浏览器属性?
附加功能:
这是我的摩卡咖啡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/');
将其放在打字稿文件的顶部
const globalAny:any = global;
然后使用globalAny代替。
globalAny.document = jsdom('');
globalAny.window = global.document.defaultView;
如果要保持类型安全,可以扩展现有的NodeJS.Global
类型定义。
您需要将定义放入全局范围内 declare global {...}
请记住,打字稿global
作用域与NodeJS接口Global
或global property
称为... global
类型的节点不同Global
。
declare global {
namespace NodeJS {
interface Global {
document: Document;
window: Window;
navigator: Navigator;
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句