属性 '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 对象定义的一部分。有几种方法可以避免该错误:

一种方法是声明类型为 anywindow 属性,如下所示:

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();