如何解决Svelte中非标准窗口事件的TypeScript键入
我在Svcode中将Svelte与TypeScript一起使用,并且在vscode中安装了Svelte扩展名。
在我的App.svelte中,
<script lang="ts">
// a bunch of code that isn't relevant. This should just show that
// `lang="ts"` is set (above)
</script>
// here comes the crucial part
<svelte:window on:beforeinstallprompt={functionDeclaredInTheScript} />
您可以看到,在<svelte:window>
标记中,我正在使用on:beforeinstallprompt
事件,这是与在某些浏览器(例如Chrome)中运行的渐进式Web应用程序相关的非标准事件。不幸的是,但可以理解的是,有效的TypeScript声明在beforeinstallprompt
对象的定义中没有Window
。 (TypeScript声明很可能来自Svelte vscode扩展名。)
我的问题是vscode在on:beforeinstallprompt
处显示错误,因为它认为该事件不存在。
错误消息是:
Type '{ onbeforeinstallprompt: (e: any) => void; }' is not assignable to type 'HTMLProps<Window> & SvelteWindowProps'.
Property 'onbeforeinstallprompt' does not exist on type 'HTMLProps<Window> & SvelteWindowProps'.ts(2322)
要摆脱该错误消息,我尝试添加一个*.d.ts
文件来扩展需要扩展的内容,但是我没有发现要扩展的内容(例如接口)或完成方法。
(注意:我知道可以使用onMount()
将处理程序附加到window.beforeinstallprompt
事件的选项,但我想知道它如何/是否与<svelte:window>
一起工作。)
解决方法
将其放入您的d.ts
文件中:
declare namespace svelte.JSX {
interface HTMLAttributes<T> {
// You can replace any with something more specific if you like
onbeforeinstallprompt?: (event: any) => any;
}
}
然后确保d.ts
中引用了tsconfig.json
文件。如果它读取的内容类似于"include": ["src/**/*"]
,并且您的d.ts
文件位于src
内部,则它应该可以工作。您可能需要重新加载才能使更改生效。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。