我注意到,如果我通过管道传输许多水龙头,可观察到的会被分配未知类型。这是为什么?
这是一个stackblitz示例。如果您注释/取消注释点击,您将看到 test$ observable 被分配了未知类型。
import { of, Observable, combineLatest, BehaviorSubject } from 'rxjs';
import { filter, map, shareReplay, switchMap, tap } from 'rxjs/operators';
interface Test {
key1: string;
}
const _selectedId = new BehaviorSubject<string>(null);
const test$: Observable<Test[]> = combineLatest([_selectedId]).pipe(
filter(([id]) => !!id),
switchMap(([id]) => httpCall()),
tap((test) => console.log(test)), //ADD OR REMOVE A TAP TO TRIGGER TYPE ERROR
tap((test) => console.log(test)),
tap((test) => console.log(test)),
tap((test) => console.log(test)),
tap((test) => console.log(test)),
tap((test) => console.log(test)),
tap((test) => console.log(test)),
shareReplay(1)
);
const httpCall = (): Observable<Test[]> => {
return of([{ key1: 'testing1' }]);
};
_selectedId.next('test');
test$.subscribe((data) => {
console.log(data);
});
Run Code Online (Sandbox Code Playgroud)
看看Observable.tspipe中是如何定义的:
pipe(): Observable<T>;
pipe<A>(op1: OperatorFunction<T, A>): Observable<A>;
pipe<A, B>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>): Observable<B>;
pipe<A, B, C>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>): Observable<C>;
pipe<A, B, C, D>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>): Observable<D>;
pipe<A, B, C, D, E>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>): Observable<E>;
pipe<A, B, C, D, E, F>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>): Observable<F>;
pipe<A, B, C, D, E, F, G>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>): Observable<G>;
pipe<A, B, C, D, E, F, G, H>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>): Observable<H>;
pipe<A, B, C, D, E, F, G, H, I>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>): Observable<I>;
pipe<A, B, C, D, E, F, G, H, I>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, ...operations: OperatorFunction<any, any>[]): Observable<unknown>;
Run Code Online (Sandbox Code Playgroud)
正如你所看到的最后一个定义
pipe<A, B, C, D, E, F, G, H, I>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, ...operations: OperatorFunction<any, any>[]): Observable<unknown>;
Run Code Online (Sandbox Code Playgroud)
有一个扩展运算符...operations: OperatorFunction<any, any>[],它允许拥有您想要的任何参数并将返回Observable<unknown>。
因此,该pipe方法最多支持 9 个具有正确返回类型的运算符函数,之后unknown如果再添加一个,它就会返回!
| 归档时间: |
|
| 查看次数: |
776 次 |
| 最近记录: |