当前位置: 首页 > 知识库问答 >
问题:

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

岑驰
2023-03-14

我有以下工作(运行)代码,但我得到TypeScript错误属性'onSubmit'不存在于类型'Window

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;
  }
}

两个解决方案都不成功,错误仍然存在。如何将属性添加到窗口对象以供TypeScript识别?

共有1个答案

云鸿祯
2023-03-14

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

下面添加它:

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

还要确保在你的global.d.ts中没有任何导入导出s,因为这样它就不再被视为环境模块。

 类似资料:
  • 我在挣扎。 当扩展一个类时,我可以很容易地向它添加一些新属性。 但是,当我扩展基类时,如果我想向基类的对象(简单对象的属性)添加新属性,该怎么办? 下面是一个带有一些代码的示例。 基类 派生类 现在,正如您可以从行内注释中看到的,这将激怒TypeScript。但这在JavaScript中工作。那么,实现这一目标的正确方法是什么呢?如果没有,问题是在我的代码模式本身吗?什么模式适合这个问题? 也许您

  • 问题内容: 这件事困扰了我一段时间。我为什么不能做: …虽然我可以执行以下操作? 这是什么规则?您能给我介绍一下吗? 问题答案: 您可以向具有的任何对象添加属性。 例如,没有它。 字符串和其他简单的内置对象也没有它。 使用类也没有它。 除非前面的声明适用,否则用定义的类都具有它。 如果使用/的对象没有/ ,通常是为了节省空间。例如,如果有一个命令,那就太过分了- 想象一下一个非常短的字符串的膨胀程

  • 我在我的组件中接收道具。我想在此组件中添加一个带有道具的属性“LegendPosition”。我不能那样做。请帮我做这个。我已经尝试过此代码,但没有成功:

  • 假设定义了以下类型: 现在,考虑以下方法来向该类型添加附加属性: 扩大 交叉口 这两种方法有什么区别? 而且,为了完整性和好奇心,还有其他方法可以产生类似的结果吗?

  • 主要内容:org.springframework.context.ApplicationContextInitializer,org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor,org.springframework.beans.factory.config.BeanFactoryPostProcessor,,,,,,,,,,,,1.可扩展的接口启动调用顺序图 ApplicationConte

  • 主要内容:org.springframework.context.ApplicationContextInitializer,org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor,org.springframework.beans.factory.config.BeanFactoryPostProcessor,,,,,,,,,,,,1.可扩展的接口启动调用顺序图 ApplicationConte