我正在与 JSDoc 作斗争,试图使其与窗口对象上的新属性一起使用。
我已经在 Window 和 globalThis 解决方案上尝试了您在代码片段中看到的两个 @typedef,但没有任何运气:(
我在JS
中有以下代码/**
* @typedef {Object} Routes
* @property {string} root - Root URL
* @property {string} product - Product URL
*/
/**
* @typedef {Object} ThemeObject
* @property {Routes} routes - All Shopify routes
*/
/**
* The global `theme` object.
* @typedef {Window & { theme: ThemeObject }}
*/
/**
* The global `Window` object.
* @typedef {globalThis & { theme: ThemeObject }} Window
*/
window.emitter = new Emitter();
window.theme.routes.root;
但是在 VS Code 中不断出现错误:
Property 'theme' does not exist on type 'Window & typeof globalThis'
我是这样解决的。我在项目的根目录中创建了一个名为
globals.d.ts
的文件。
export interface GlobalData {
myString: string;
}
declare global {
interface Window {
globalData: GlobalData;
}
}
export
很重要,因为它使文件成为一个模块。然后在根目录app.js
我像这样导入:
/**
* @typedef {import('./globals')}
*/
并且
window
因此得到增强。