Issue
I want to fetch customers list from my back-end via get Http call. But i am unable to declare array of customers in my component.
I have customer.interface.ts like this
export interface Customer {
_id?: string,
name: string,
email: string,
phone?: string,
address?: string,
age?: number
}
I have http.service.ts
get = (url: string): Observable<any> => {
return this.http.get(this.createUrl(url), { headers: this.getHeaders() });
}
In my customer.service.ts
getCustomers(): Observable<Customer[]>{
return this._http.get(ApiConstants.getCustomers);
}
In my customer.component.ts
customers$: Observable<Customer[]> = [];
ngOnInit(){
this.customers$ = this.customerService.getCustomers();
}
Now it's giving me an error on this line customers$: Observable<Customer[]> = [] like this inside editor at compile time.
Type 'never[]' is missing the following properties from type 'Observable<Customer[]>': isScalar, source, operator, lif and 5 more
What's wrong here?
Solution
Type of customers$ is an Observable, so you can't assign an empty array to it. So you don't need to define it at all. This would be enough ->
customers$!: Observable<Customer[]>;
Add this ! if your "strictPropertyInitialization" in tsconfig.json is set to true, if not you can omit it. This ! is needed when you don't initialize the property straight away. You can set "strictPropertyInitialization" to false and then omit the !. You can take a look at Property '...' has no initializer and is not definitely assigned in the constructor
Also, when you need to create an Observable out of something you can use of RxJS operator that converts the arguments to an observable sequence. https://rxjs.dev/api/index/function/of
One addition would be to add casting after .get to be more clear about the type.
getCustomers(): Observable<Customer[]> {
return this._http.get<Customer[]>(ApiConstants.getCustomers);
}
Answer of this question may help you Typescript: Type X is missing the following properties from type Y length, pop, push, concat, and 26 more. [2740]
Answered By - Chaka15
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.