typescript - Tip 'Observable<{}>' nije dodjeljiv tipu 'Observable | boolean'


Pokušavam pratiti ovaj vodič, ali dobivam pogreške.

  1. pathMatch: 'full'. Pokušao sam promijeniti "@angular/router" u "3.0.0-beta.2", ali problem je i dalje isti.

Moje ovisnosti:

"dependencies": {
    "@angular/common": "2.0.0-rc.3",
    "@angular/compiler": "2.0.0-rc.3",
    "@angular/core": "2.0.0-rc.3",
    "@angular/http": "2.0.0-rc.3",
    "@angular/platform-browser": "2.0.0-rc.3",
    "@angular/platform-browser-dynamic": "2.0.0-rc.3",
    "@angular/platform-server": "2.0.0-rc.3",
    "@angular/router": "3.0.0-beta.2",
    "@angular/router-deprecated": "2.0.0-rc.2",
    "nativescript-angular": "0.2.0",
    "tns-core-modules": "^2.1.0"
},
  1. Tip 'Observable<{}>'' nije dodjeljiv tipu 'Observable', što upućuje na liniju 'return o';

    canDeactivate(): Observable<boolean> | boolean {
    
    if (!this.crisis || this.crisis.name === this.editName) {
    
    return true;
    }
    let p = this.dialogService.confirm('Discard changes?');
    let o = Observable.fromPromise(p);
    return o;
    }
    

Može li mi netko pomoći da ispravim ove pogreške? Hvala.

Odgovor #1

Možete pokušati kastati:

canDeactivate(): Observable<boolean> | boolean {

    if (!this.crisis || this.crisis.name === this.editName) {

        return true;
    }
    let p = this.dialogService.confirm('Discard changes?');
    let o = <Observable<boolean>>Observable.fromPromise(p);
    return o;
}

Odgovor #2

Kompajler se žali jer je povratna vrijednost o tipa Observable<{}>. To je najvjerojatnije zato što konstruirate Observable iz p, koji se rješava u tip Promise<{}>. Dvaput provjerite dialogService.confirm() i uvjerite se da je njegova povratna vrijednost tipa Promise<boolean>.

Ako to ne uspije, možete pokušati eksplicitno kastati kao što @rinukkusu sugerira.

Povezani članci