javascript - לא ניתן להקצות ארגומנט מסוג '{}' לפרמטר מסוג ב-Angular 8
יש לי שיטה לטיפול בטעויות:
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);
};
}
private log(message: string) {
console.log(message);
}
ואני רוצה להשתמש בזה בתוך השיטה שלי:
getMyStructure(): Observable<HttpResponse<StructureResponse>> {
return this.http.get< StructureResponse >(
localUrl).pipe(retry(3), catchError(this.handleError<StructureResponse>('getMyStructure', {})));
}
אבל ה-{} האחרון גרם לי לשגיאה. ה-StructureResponse הוא ממשק עם מספר שדות. כפי שאני מבין, אני אמור לשים שם אובייקט מסוים (ריק?) של StructureResponse, אבל אני כבר לא בטוח. האם אתה יכול לעזור לי עם זה?
זו התגובה של המבנה:
interface SomeStructure {
content: MyStructure[];
page: number;
size: number;
totalElements: number;
totalPages: number;
last: boolean
}
תשובה #1
הוסף ? לכל נכס.
interface SomeStructure {
content?: MyStructure[];
page?: number;
size?: number;
totalElements?: number;
totalPages?: number;
last?: boolean
}
השתמש ב-Observable<StructureResponse> במקום ב-Observable<HttpResponse<StructureResponse>> כפי שמופיע למטה.
getMyStructure(): Observable<StructureResponse> {
return this.http.get< StructureResponse >(
localUrl).pipe(retry(3), catchError(this.handleError<StructureResponse>('getMyStructure', {})));
}
תשובה #2
אם אתה מעביר אובייקט ריק, הדרך היחידה שהוא יוקצה לאינטרפייס היא שכל התכונות מהאינטרפייס הן אופציונליות (עם ?), אחרת אתה צריך לפחות להציג את התכונות שלך באובייקט עם null או ערך אחר.
