Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 自定义RxJS筛选器运算符中的非Null类型保护_Typescript_Rxjs - Fatal编程技术网

Typescript 自定义RxJS筛选器运算符中的非Null类型保护

Typescript 自定义RxJS筛选器运算符中的非Null类型保护,typescript,rxjs,Typescript,Rxjs,如何在自定义RxJS操作符中实现不可为null的类型保护?下一个代码 export const filterNil=()=>(源代码:Observable):Observable=>source.pipe( 筛选器((值:T):值不可为null=>value!==null&&value!==undefined), ); 抛出ts错误: TS2345: Argument of type 'MonoTypeOperatorFunction<T>' is not assignable t

如何在自定义RxJS操作符中实现不可为null的类型保护?下一个代码

export const filterNil=()=>(源代码:Observable):Observable=>source.pipe(
筛选器((值:T):值不可为null=>value!==null&&value!==undefined),
);
抛出ts错误:

TS2345: Argument of type 'MonoTypeOperatorFunction<T>' is not assignable to parameter of type 'OperatorFunction<T | null | undefined, T>'.
  Types of parameters 'source' and 'source' are incompatible.
    Type 'Observable<T | null | undefined>' is not assignable to type 'Observable<T>'.
      Type 'T | null | undefined' is not assignable to type 'T'.
        Type 'undefined' is not assignable to type 'T'.
TS2345:类型为“MonoTypeOperatorFunction”的参数不能分配给类型为“OperatorFunction”的参数。
参数“源”和“源”的类型不兼容。
类型“Observable”不可分配给类型“Observable”。
类型“T | null | undefined”不可分配给类型“T”。
类型“未定义”不可分配给类型“T”。

我使用下一个代码解决了一个问题:

export const filterNil = <T>() => (source: Observable<T>): Observable<NonNullable<T>> => source.pipe(
    filter<T, NonNullable<T>>((value: T): value is NonNullable<T> => value !== null && value !== undefined),
);
export const filterNil=()=>(源代码:Observable):Observable=>source.pipe(
筛选器((值:T):值不可为null=>value!==null&&value!==undefined),
);

我使用下一个代码解决了一个问题:

export const filterNil = <T>() => (source: Observable<T>): Observable<NonNullable<T>> => source.pipe(
    filter<T, NonNullable<T>>((value: T): value is NonNullable<T> => value !== null && value !== undefined),
);
export const filterNil=()=>(源代码:Observable):Observable=>source.pipe(
筛选器((值:T):值不可为null=>value!==null&&value!==undefined),
);

在这种情况下,我喜欢使用
source.pipe(switchMap(value=>value!==undefined?of(value):EMPTY))
,它处理类型而不需要自定义运算符。在这种情况下,我喜欢使用
source.pipe(switchMap(value=>value!==undefined?of(value):EMPTY))
,它处理类型而不需要自定义运算符。