如何在TypeScript中触发resize事件并解决initUIEvent不存在报错
报错原因
- TypeScript 内置的
UIEvent类型定义未收录已废弃的initUIEvent方法,因此在编译阶段会直接抛出类型校验错误 initUIEvent本身属于 DOM 规范中已经废弃的API,现代浏览器普遍推荐直接使用事件构造函数创建事件,无需再使用createEvent+ 初始化方法的旧写法
解决方案
推荐直接删除老旧浏览器兼容分支,目前所有主流浏览器(Chrome、Firefox、Safari、Edge)都支持 Event 构造函数,简化后的代码即可正常运行,无编译报错:
trigger() { window.dispatchEvent(new Event('resize', { bubbles: true, cancelable: false })); }
如果确实需要保留对极老旧浏览器的兼容,可以通过类型断言跳过 TypeScript 的类型校验:
trigger() { if (typeof Event === 'function') { window.dispatchEvent(new Event('resize')); } else { // 类型断言告知TS当前事件对象存在initUIEvent方法 const resizeEvent = window.document.createEvent('UIEvents') as unknown as { initUIEvent: (type: string, bubbles: boolean, cancelable: boolean, view: Window, detail: number) => void }; resizeEvent.initUIEvent('resize', true, false, window, 0); window.dispatchEvent(resizeEvent); } }
内容的提问来源于stack exchange,提问作者Sansara
相关产品推荐
相关产品推荐

