Ionic2报错:Window类型不存在openDatabase属性,WebSQL备用库创建受阻
解决Ionic2/3中WebSQL的TypeScript类型错误:Property 'openDatabase' does not exist on type 'Window'
你遇到的这个问题是TypeScript的类型检查机制导致的——默认的Window接口类型定义里并没有包含WebSQL的openDatabase方法,所以编译器会抛出这个错误。下面给你几个实用的解决办法:
方案一:使用类型断言快速绕过检查
这是最直接的临时解决方法,把window断言为any类型,让TypeScript跳过对这个属性的类型校验:
修改你的构造函数代码:
private db:any; constructor( private storage: SQLite, private platform: Platform, private windowserv:WindowServiceProvider ) { if (this.platform.is('core') || this.platform.is('mobileweb')) { // 用类型断言解决类型报错 this.db = (window as any).openDatabase(this.db_name, "1.0", "Database", 2 * 1024 * 1024); } }
方案二:扩展Window接口(更规范的长期方案)
如果想让TypeScript正式识别WebSQL的方法,你可以扩展全局的Window接口:
- 在你的Ionic项目根目录下创建一个类型定义文件,比如
src/typings.d.ts(如果已经存在就直接编辑) - 在文件中添加以下代码:
declare global { interface Window { openDatabase: ( name: string, version: string, displayName: string, estimatedSize: number, creationCallback?: () => void ) => any; } } export {};
- 保存文件后,TypeScript会自动加载这个扩展的接口定义,之后你就可以正常使用
window.openDatabase而不会报错了。
额外提示
记得确保你的平台判断逻辑是准确的,WebSQL只在浏览器环境(core/mobileweb)中可用,原生平台还是要依赖SQLite插件,这部分你已经做了判断,没问题。
内容的提问来源于stack exchange,提问作者Geoff
相关产品推荐
相关产品推荐

