rxjs
5から6に移行しようとしていますが、問題があります。私がこれを試すとき
this._connectivity.isOnline().pipe(first()).subscribe((state) => {
this.syncCheck(user.uid);
});
このエラーが発生しています
Argument of type 'MonoTypeOperatorFunction<any>' is not assignable to parameter of type 'UnaryFunction<Observable<any>, Observable<any>>'.
Types of parameters 'source' and 'source' are incompatible.
Type 'import("/home/User/Desktop/projectname/node_modules/rxjs/Observable").Observable<any>' is not assignable to type 'import("/home/User/Desktop/projectname/node_modules/rxjs/internal/Observable").Observable<a...'.
Property 'map' is missing in type 'Observable<any>'.
isOnline()
戻り型のインポートが間違っているようです。必ずrxjs
からインポートし、_rxjs/internal
_または_rxjs/internal/Observable
_からもインポートしないようにしてください。 (first()
のような演算子は_rxjs/operators
_からインポートする必要があります)
私のコードで同じエラーが見つかりました:
let source = of([1, 2, 3, 45, 56, 7, 7])
.pipe(
filter((x: number) => x % 2 == 0)
);
TS2345:タイプ 'MonoTypeOperatorFunction'の引数は、タイプ 'OperatorFunction'のパラメーターに割り当てることができません。
これを修正するには、フィルター関数から型を削除してください
filter(x => x % 2 == 0)
今、あなたはエラーがあります
算術演算の左側は「any」、「number」型でなければならないため、この迷惑なフィルターが正しいデータ型を取得することを確認してください
filter(x => Number(x) % 2 == 0) // parse element to number
しかし、現在、コードは動作を停止します。最後に、これを修正するには、最初にtoを変更します。
let source = from([1, 2, 3, 45, 56, 7, 7])
.pipe(
filter((x: number) => Number(x) % 2 === 0)
)
または
let source = of(1, 2, 3, 45, 56, 7, 7)
.pipe(
filter((x: number) => Number(x) % 2 === 0)
)
そのため、エラーの原因は最初のデータ構造でした。
私の例は、同様の問題に対処するのに役立つと思います。
HTTPサービスメソッドの1つでパイプを使用すると同様のエラーが発生しました(下部の例を参照)。問題は、サブスクライブで使用されるコールバック関数の入力不足でした。あなたの場合、タイプを追加する(最良のアイデアではなく、any
)をstate
に追加するか、括弧を削除します。
解決策1:
this._connectivity.isOnline()
.pipe(first()).subscribe((state: any) => {
this.syncCheck(user.uid);
});
解決策2:
this._connectivity.isOnline()
.pipe(first()).subscribe(state => {
this.syncCheck(user.uid);
});
私の事例に戻って、パイプを使用してデータのログを記録しました。 observableに2つの可能なタイプを設定する必要があり、コールバック関数を入力することができました。
public getPrice(): Observable<string | PriceDTO> {
return this.http.get<PriceDTO>(`api/price)
.pipe(
tap((data: PriceDTO) => console.log('PRICE: ', data)),
catchError((val: Error) => of(`I caught: ${val}`))
);
}
このような問題があり、最初のスキャンが機能していなかったため、変更しました
.pipe(scan((count ) => count + 1, 0))...
に
.pipe(scan((count:any ) => count + 1, 0))
また、問題は、Rxjsがこのアプリの親フォルダーにもインストールされたことでした。これを削除すると、問題は解決したと思います。
npm-check packageを使用することは、npmパッケージのグローバルレベルとローカルレベルのどちらかの問題をクリーニングするのに適しています。