Ho un progetto in cui sto usando Ionic2
/ Cordova Plugins
/ Android
.
$ mkdir stackoverflow-question
$ cd stackoverflow-question
$ git clone https://github.com/napolev/stackoverflow-question.git .
$ npm install
$ ionic platform add android
$ ionic run android -l
Questo progetto funziona correttamente. È fondamentalmente a Hello World
progetto. Quando si fa clic sul pulsante sullo schermo si ottiene il messaggio Hello, World
restituito da a Cordova
collegare.
Il mio problema è che sulla linea 17
:
Voglio usare:
window.hello.greet(...)
invece di
window["hello"].greet(...)
ma quando uso: window.hello.greet(...)
Ottengo l'errore:
Property "hello" does not exist on type "Window".
Come puoi vedere nell'immagine seguente:
Qualche idea su come usare la notazione dot per fare uso di una custom Cordova
collegare?
[EDIT 1]
Come da @sebaferreras
suggerimento sul suo commento ho cambiato il codice nel modo seguente e funziona correttamente:
import { Component } from "@angular/core";
import { NavController } from "ionic-angular";
@Component( {
selector: "page-home",
templateUrl: "home.html",
})
export class HomePage {
private window: any = window;
private greet: string;
constructor(
public navCtrl: NavController,
) {}
private doGreet() {
this.window.hello.greet("World", (message) => {
this.greet = message;
}, () => {
this.greet = "[ERROR]";
});
}
}
ma mi piacerebbe sapere:
è una buona pratica da fare:
private window: any = window;
c'è qualche altro tipo più specifico di
any
che posso usare sulla linea sopra?
risposte:
1 per risposta № 1Poiché quell'errore è solo Typescript che si lamenta di non sapere nulla di a hello
proprietà nel window
oggetto, puoi lanciare il window
oggetto a any
come questo:
(<any>window).hello.greet(...)
modificare
Se vuoi evitare il cast any
, potresti creare la tua classe basata su Window
classe come questa:
export interface IGreetingService {
greet(): void; // Here you can add any function signature
}
export class CustomWindow extends Window {
hello: IGreetingService;
}
Quindi potresti usarlo in questo modo:
(<any>CustomWindow).hello.greet(...)
O
private window: CustomWindow = window; // The cast is being done here!
this.window.hello.greet(...)
0 per risposta № 2
Solitamente si utilizzano plug-in personalizzati in Ionic / Cordova come questo: Aggiungi la seguente riga nella parte superiore del tuo file:
declare var NameOfTheJsModule
Puoi trovare il nome del modulo js in plugin.xml del plugin sotto la proprietà name:
<js-module src="www/inappbrowser.js" name="inappbrowser">
...
</js-module>
quindi in questo caso:
delcare var inappbrowser;
e usarlo per esempio
this.inappbrowser.show();