Сегодня я столкнулся со следующей проблемой при попытке реализовать абстрактный HTTP-сервис. Эта услуга должна основываться на всех других сервисах http.RxJS наблюдаемые и общие типы для Angular2 (Typcript) http wrapper
Реализация следит за до сих пор, пропуская другие методы Ilustration:
@Injectable()
export abstract class HttpWrapper<T> {
private options: RequestOptions;
constructor(private http: Http, private endpointUrl: string) {
let headers = new Headers();
headers.append('Content-Type', 'application/json');
this.options = new RequestOptions({ headers: headers });
}
public getAll(): Observable<T[]>{
return this.http.get(this.endpointUrl, this.options)
.map(this.extractAll)
.catch(this.handleError);
}
abstract handleError(error: any):Observable<Response>;
abstract extractOne(res: Response):T;
abstract extractAll(res: Response):T[];
}
Теперь, если я хочу использовать аннотацию HttpWrapper я сделать следующее:
@Injectable()
export class BlastReportService extends HttpWrapper<Item> {
constructor(http: Http) {
super(http,'/api/items');
}
handleError(error: any):Observable<Response>{
//Handling error
return Observable.throw(error);
}
extractAll(res: Response):Item[]{
let body = res.json();
let formatedBody = body.map((item: Item) => {
item = new Item(item);
return blastReport;
});
return formatedBody || [{}];
}
}
Но при этом я получаю следующая погрешность компиляции:
Type 'Observable<Response>' is not assignable to type 'Observable<T[]>'.
Type 'Response' is not assignable to type 'T[]'.
Property 'find' is missing in type 'Response'.
Я не могу обмотать голову вокруг этого, потому что метод extractAll явно возвращает Item [] и используется при сопоставлении результатов, возвращаемых с сервера.
Я решил реализовать этот абстрактный HttpWrapper «оставаться сухим». Я не уверен, что это лучший способ сделать это.
extractAll возвращает позицию [], но ваш класс должен быть HttpWrapper. Поэтому он должен вернуть BlastReport []. Также неясно, откуда это сообщение об ошибке. Пожалуйста, сообщите полную и точную ошибку. –
Кроме того, ваш метод должен возвращать Observable, но handleError возвращает Observable . –
Прошу прощения за этот взрыв, который не должен быть в вопросе. Редактирование. –