Svelte / SvelteKit 和 Typescript:向 window 对象添加属性,或扩展接口

Svelte / SvelteKit and Typescript: add properties to the window object, or extend the interface

我有以下工作 (运行) 代码,但收到 TypeScript 错误 属性 'onSubmit' 在类型 'Window & typeof globalThis' 上不存在。 .

function onSubmit() {
  . . .
}

onMount(() => {
  window.onSubmit = onSubmit; <-- Error
});

onDestroy(() => {
  window.onSubmit = null; <-- Error
});

在我的 global.d.ts 文件中,我尝试导出接口以导入

export interface CustomWindow extends Window {
  onSubmit: () => void;
}

并声明一个全局

declare global {
  interface Window {
    onSubmit: () => void;
  }
}

两种解决方案均未成功,错误仍然存​​在。我们如何向 window 对象添加属性以便 TypeScript 识别?

几乎正确,declare 是正确的关键字,但您不需要用 global 包装它。

下面补充一下:

declare interface Window {
  onSubmit: () => void;
}

还要确保您的 global.d.ts 中没有任何 importexport,因为这样它就不再被视为环境模块。