エラー:タイプ 'サブスクリプション'には、タイプ 'Observable>'の次のプロパティがありません:_isScalar、source、operator、lift、およびその他6つ。ts(2740)
ここにコードを添付しました。
ここでは、私の場合、オブザーバブルを返す2つのメソッドがありますが、getByTypeDataとgetByTypeです。しかし、this.getByType(type)..をgetByTypeData()から返すと、エラーが発生します。
PS:オブザーバブルを返すコンポーネントでgetByTypeDataをサブスクライブしたい。そして、私は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);
}
コメントで指摘されているように、Subscription
を返す代わりにObservable
を返しています。 ドキュメント を読んで、それらの違いをよく理解することをお勧めします。
あなたの特定のケースでは、代わりに次のようなものを試すことをお勧めします:
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
は、次のようなステートメントでインポートする必要があるrxjs演算子です。
import { switchMap } from 'rxjs/operators'