ERREUR: le type 'Abonnement' ne contient pas les propriétés suivantes du type 'Observable>': _isScalar, source, operator, lift et 6 more.ts (2740)
Ici, j'ai joint mon code.
Ici, dans mon cas, j'ai deux méthodes qui retournent un observable, mais getByTypeData et getByType. Mais, en renvoyant this.getByType (type) .. à partir de getByTypeData (), j'obtiens au-dessus de l'erreur.
P.S .: Je veux souscrire getByTypeData dans mon composant qui devrait me renvoyer un observable. ET JE SUIS NOUVEAU SUR RXJS ...
/*
interface IStringMap<T> {
[index: string]: T;
}
*/
getByTypeData(type: string, ignoreApi = false): Observable<stringMap<any>> {
if (ignoreApi) {
this.handleConfig(type);
}
return this.getByType(type)
.subscribe(response => {
const config = response.result ? response.data : {};
return this.handleConfig(type, config);
});
}
// This method in another file (Just for reference)
getByType(type: string): Observable<stringMap<any>> {
return this.httpClient.get(`get url`);
}
handleConfig(type: string, config: stringMap<string | number> = {}): Observable<stringMap<any>> {
if (type === this.types) {
config.token = this.anotherservice.GetKey('mykey');
if (config.token) {
// logic
}
}
if (type === this.types) {
// logic
}
return of(config);
}
Comme indiqué dans les commentaires, vous retournez un Subscription
au lieu de renvoyer un Observable
. Je vous suggère de lire la documentation pour avoir une bonne idée de la différence entre eux.
Dans votre cas particulier, je vous suggère plutôt d'essayer quelque chose comme ceci:
getByTypeData(type: string, ignoreApi = false): Observable<stringMap<any>> {
if (ignoreApi) {
return this.handleConfig(type);
}
return this.getByType(type).pipe(
switchMap(response => {
const config = response.result ? response.data : {};
return this.handleConfig(type, config);
})
);
}
switchMap
est un opérateur rxjs qui doit être importé avec une instruction comme celle-ci:
import { switchMap } from 'rxjs/operators'