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

use*_*025 7 typescript svelte sveltekit

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

function onSubmit() {
  . . .
}

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

onDestroy(() => {
  window.onSubmit = null; <-- Error
});
Run Code Online (Sandbox Code Playgroud)

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

export interface CustomWindow extends Window {
  onSubmit: () => void;
}
Run Code Online (Sandbox Code Playgroud)

并宣布全球

declare global {
  interface Window {
    onSubmit: () => void;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

dum*_*umm 8

几乎正确,declare是正确的关键字,但您不需要将其包装起来global

下面补充一下:

declare interface Window {
  onSubmit: () => void;
}
Run Code Online (Sandbox Code Playgroud)

还要确保您的 as 中没有任何imports 或exports global.d.ts,然后它不再被视为环境模块。