我嘗試將現有項目轉換爲使用Typescript,並且在測試設置中遇到問題。如何防止使用jsdom和typecript在'Global'類型中不存在'Property'...''?
我有一個設置文件,用於設置jsdom的測試,以便我所有的DOM交互代碼在我的測試過程中都能正常工作。使用打字稿(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/');
不能確定這是正確的答案,而是通過類似的疼痛在經歷,事實證明,內部文件你擴展NodeJS.Global接口必須全部小寫,否則類型將忽略它。而且,它不能在頂部有任何導入或導出語句 - 否則它將被視爲模塊而不是類型文件。 – Izhaki