Hi there I am learning angular with version 6. I am trying to map a basic http response and return in an Observable
, however, I am getting this type casting error.
market-data.component.ts
import { Component, OnInit, Inject } from "@angular/core";
import { MarketDataService } from "./market-data.service";
import { CoinMarketCapTokenEntity } from "../entity/coinmarketcaptoken-entity";
@Component({
selector: "app-market-data",
templateUrl: "./src/app/market-data.component.html"
})
export class MarketDataComponent implements OnInit {
private _marketDataService: MarketDataService;
private _tokens: CoinMarketCapTokenEntity[];
constructor(marketDataService: MarketDataService) {
this._marketDataService = marketDataService;
}
ngOnInit() {
this._tokens = this._marketDataService.getCoinMarketCapTokens();
}
}
market-data-service
import { Injectable } from "@angular/core";
import { Http, Response, Headers } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import { CoinMarketCapTokenEntity } from "../entity/coinmarketcaptoken-entity";
const coinMarketcapCoinsUrl = "https://s2.coinmarketcap.com/generated/search/quick_search.json";
@Injectable()
export class MarketDataService {
private _http: Http;
constructor(http: Http) {
this._http = http;
}
getCoinMarketCapTokens(): Observable<CoinMarketCapTokenEntity[]> {
return this._http.get(coinMarketcapCoinsUrl, {headers: this.getHeaders()})
.map(this.mapTokens);
}
mapTokens(response: Response): CoinMarketCapTokenEntity[] {
return response.json().map(this.toCoinMarketCapToken);
}
toCoinMarketCapToken(r: any): CoinMarketCapTokenEntity {
let token = <CoinMarketCapTokenEntity>({
name: r.name,
symbol: r.symbol,
rank: r.rank,
slug: r.slug,
tokens: r.tokens,
id: r.id
});
return token;
}
getHeaders() {
let headers = new Headers();
headers.append("Accept", "application/json");
return headers;
}
}
and the error I am having is
src/app/market-data.component.ts(18,9): error TS2322: Type 'Observable<CoinMarketCapTokenEntity[]>' is not assignable to type 'CoinMarketCapTokenEntity[]'.
[1] Property 'length' is missing in type 'Observable<CoinMarketCapTokenEntity[]>'
I also checked the duplicate question here - Observable<{}> not assignable to type Observable<SomeType[]>
however none of the solutions worked. Thanks for your help