属性 'cordova' 在类型 'Window' 上不存在。 : 离子
Property 'cordova' does not exist on type 'Window'. : ionic
在我的代码中,我得到的错误是 Property 'cordova' does not exist on type 'Window'.
这是我收到错误的地方
var browserRef = window.cordova.InAppBrowser.open()
我也安装了 typings
但我仍然收到此错误。我该如何解决这个问题?
Cordova 仅在设备上执行,不在浏览器中执行。在浏览器中查看构建时避免错误的方法是将 Cordova 命令包装在平台 if 语句中。例如:
import { Platform } from 'ionic-angular';
import { InAppBrowser } from '@ionic-native/in-app-browser';
constructor( private platform: Platform, private iab: InAppBrowser ) {
this.platform.ready().then(function () {
if (platform.is('cordova')) {
// your code, eg:
this.iab.create('http://google.com/', '_blank');
}
});
}
这只是 Typescript 的抱怨,因为 cordova
不是 window
对象定义的一部分。有几种方法可以避免该错误:
一种方法是声明类型为 any
的 window
属性,如下所示:
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
declare let window: any; // <--- Declare it like this
@Component({
selector: 'page-demo',
templateUrl: 'demo.html'
})
export class DemoPage {
constructor(public navCtrl: NavController, ...) { }
public yourMethod(): void {
var browserRef = window.cordova.InAppBrowser.open(); // <--- and use it like this
}
}
另一种方法是在要使用它的同一语句中将 window
对象转换为 any
类型:
var browserRef = (<any>window).cordova.InAppBrowser.open();
// or
var browserRef = (window as any).cordova.InAppBrowser.open();
如果您不想使用 any
,您还可以根据要调用的 method/s 定义 window
对象的类型:
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
declare let window: {
cordova: {
InAppBrowser: {
open: () => {};
}
}
}
@Component({
selector: 'page-demo',
templateUrl: 'demo.html'
})
export class DemoPage {
constructor(public navCtrl: NavController, ...) { }
public yourMethod(): void {
var browserRef = window.cordova.InAppBrowser.open();
}
}
另一个解决方案是改变
window.cordova
至
window['cordova']
在打字稿 4 中,tslint 不再喜欢 <any>
转换。
现在好像比较喜欢这个
var browserRef = (window as any).cordova.InAppBrowser.open();
在我的代码中,我得到的错误是 Property 'cordova' does not exist on type 'Window'.
这是我收到错误的地方
var browserRef = window.cordova.InAppBrowser.open()
我也安装了 typings
但我仍然收到此错误。我该如何解决这个问题?
Cordova 仅在设备上执行,不在浏览器中执行。在浏览器中查看构建时避免错误的方法是将 Cordova 命令包装在平台 if 语句中。例如:
import { Platform } from 'ionic-angular';
import { InAppBrowser } from '@ionic-native/in-app-browser';
constructor( private platform: Platform, private iab: InAppBrowser ) {
this.platform.ready().then(function () {
if (platform.is('cordova')) {
// your code, eg:
this.iab.create('http://google.com/', '_blank');
}
});
}
这只是 Typescript 的抱怨,因为 cordova
不是 window
对象定义的一部分。有几种方法可以避免该错误:
一种方法是声明类型为 any
的 window
属性,如下所示:
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
declare let window: any; // <--- Declare it like this
@Component({
selector: 'page-demo',
templateUrl: 'demo.html'
})
export class DemoPage {
constructor(public navCtrl: NavController, ...) { }
public yourMethod(): void {
var browserRef = window.cordova.InAppBrowser.open(); // <--- and use it like this
}
}
另一种方法是在要使用它的同一语句中将 window
对象转换为 any
类型:
var browserRef = (<any>window).cordova.InAppBrowser.open();
// or
var browserRef = (window as any).cordova.InAppBrowser.open();
如果您不想使用 any
,您还可以根据要调用的 method/s 定义 window
对象的类型:
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
declare let window: {
cordova: {
InAppBrowser: {
open: () => {};
}
}
}
@Component({
selector: 'page-demo',
templateUrl: 'demo.html'
})
export class DemoPage {
constructor(public navCtrl: NavController, ...) { }
public yourMethod(): void {
var browserRef = window.cordova.InAppBrowser.open();
}
}
另一个解决方案是改变
window.cordova
至
window['cordova']
在打字稿 4 中,tslint 不再喜欢 <any>
转换。
现在好像比较喜欢这个
var browserRef = (window as any).cordova.InAppBrowser.open();