2017-12-31 51 views
2

i erhalten folgende Fehler in der Konsole:Angular TS Fehler TS1109

webpack: Compiling... 10% building modules 0/1 modules 1 active ...p/shoppinglist2/src/app/app.module.tsERROR in src/app/meal.service.ts(46,56): error TS1109: Expression expected.

Date: 2017-12-31T09:55:50.224Z
Hash: 8003d6d8f334085afa7f Time: 267ms chunk {inline} inline.bundle.js (inline) 5.79 kB [entry] chunk {main} main.bundle.js (main) 73.1 kB [initial] [rendered] chunk {polyfills} polyfills.bundle.js (polyfills) 558 kB [initial] chunk {styles} styles.bundle.js (styles) 456 kB [initial] chunk {vendor} vendor.bundle.js (vendor) 11.3 MB [initial]

webpack: Compiled successfully.

Ich sehe das Problem nicht. Der Code basiert auf dem Angular HTTP-Beispiel von https://angular.io/tutorial/toh-pt6. Ich verwende Angular^5.0.0, rxjs^5.5.2

-Code von meal.service.ts:

import { Injectable }    from '@angular/core'; 
import { Observable }    from 'rxjs/Observable'; 
import { catchError, map, tap } from 'rxjs/operators'; 
import { of }      from 'rxjs/observable/of'; 
import { HttpClient, HttpHeaders, 
     HttpParams }    from '@angular/common/http'; 

import { MessageService }   from './message.service'; 
import { Meal, oneMeal, Meals } from './meal'; 

const httpOptions = { 
    headers: new HttpHeaders({'Content-Type': 'application/json'}) 
}; 

@Injectable() 
export class MealService { 

    constructor(
    private http: HttpClient, 
    private messageService: MessageService 
) { }; 

    private mealUrl = 'http://192.168.178.11:1337/api/meal'; 

    private log(message: string) { 
    this.messageService.add('MealService: ' + message); 
    }; 

    private handleError<T> (operation = 'operation', result?: T) { 
    return (error: any): Observable<T> => { 
     console.error(error) 
     this.log(`${operation} failed: ${error.message}`); 
     return of(result as T); 
    }; 
    } 

    getMeals (page:number): Observable<Meals> { 
    let httpParams = new HttpParams().set('where', '%') 
     .set('orderBy', 'meal_id') 
     .set('page', page.toString()) 
     .set('items', '10'); 
    //this.messageService.add('Debug: ' + httpParams); 
    return this.http.get<Meals>(this.mealUrl, { params: httpParams }) 
     .pipe(
     tap(meals => this.log(`fetched ${meals.count} entries`)), 
     catchError(this.handleError('getMeals', <Meals>)) // Line 46: the Error 
    ); 
    }; 

    getMeal (id:number): Observable<oneMeal> { 
    let httpParams = new HttpParams().set('id', id.toString()); 
    //this.messageService.add(`MealService: fetched meal_id=${id}`); 
    return this.http.get<oneMeal>(this.mealUrl, { params: httpParams }) 
     .pipe(
     tap(meal => this.log(`fetched ${meal.data[0].meal_name}`))//, 
     //catchError(this.handleError('getMeal', <oneMeal>)) 
    ); 
    } 
} 

Antwort

4

Sie sind generische Methode in falsche Weg aufrufen, so dass Sie diese bekommen -

ERROR in src/app/meal.service.ts(46,56): error TS1109: Expression expected

Falscher Weg

catchError(this.handleError('getMeals', <Meals>)) // Line 46: the Error 

korrekte Art und Weise

catchError(this.handleError<Meals>('getMeals')) 

getMeals (page:number): Observable<Meals> { 
    let httpParams = new HttpParams().set('where', '%') 
     .set('orderBy', 'meal_id') 
     .set('page', page.toString()) 
     .set('items', '10'); 
    //this.messageService.add('Debug: ' + httpParams); 
    return this.http.get<Meals>(this.mealUrl, { params: httpParams }) 
     .pipe(
     tap(meals => this.log(`fetched ${meals.count} entries`)), 
     catchError(this.handleError<Meals>('getMeals')) // Line 46: the Error 
    ); 
    }; 
+0

Wenn ich so bekomme ich diesen Fehler: 'ERROR in src/app/meal.service.ts (43,5): Fehler TS2322: Typ 'beobachtbare <{} | Meals>' ist nicht übertragbar 'beobachtbar ' eingeben. Geben Sie '{} | Mahlzeiten 'ist nicht dem Typ' Mahlzeiten 'zuzuordnen. Typ '{}' kann nicht dem Typ 'Mahlzeiten' zugewiesen werden. Eigenschaft 'count' fehlt im Typ '{}'. src/app/meal.service.ts (46,56): Fehler TS2345: Das Argument des Typs 'typeof Meals' kann nicht dem Parameter 'Meals' zugewiesen werden. Die Eigenschaft 'count' fehlt im Typ 'typeof Meals'. ' – Sven

+0

@seven: die Antwort aktualisiert –

0

, wenn Sie die handle Funktion in der Dokumentation überprüfen, die Sie verwiesen auf, man es erwartet einen Parameter zu erhalten,

private handleError<T> (operation = 'operation', result?: T) { 
return (error: any): Observable<T> => { 

    // TODO: send the error to remote logging infrastructure 
    console.error(error); // log to console instead 

    // TODO: better job of transforming error for user consumption 
    this.log(`${operation} failed: ${error.message}`); 

    // Let the app keep running by returning an empty result. 
    return of(result as T); 
}; 
} 

werden feststellen, Aber in Ihrem Code verwenden Sie die HandleError-Funktion falsch.

getMeals (page:number): Observable<Meals> { 
    let httpParams = new HttpParams().set('where', '%') 
     .set('orderBy', 'meal_id') 
     .set('page', page.toString()) 
     .set('items', '10'); 
    //this.messageService.add('Debug: ' + httpParams); 
    return this.http.get<Meals>(this.mealUrl, { params: httpParams }) 
     .pipe(
     tap(meals => this.log(`fetched ${meals.count} entries`)), 
     catchError(this.handleError('getMeals', <Meals>)) // Line 46: the Error 
    ); 
    }; 

Deshalb sollten Sie diese bekommen - ERROR in src/app/meal.service.ts (46,56): Fehler TS1109: Ausdruck erwartet. So versuchen, diese -

catchError(this.handleError< Meals >('getMeals'))

Hoffnung, das hilft.

Verwandte Themen