是否有特定的习惯用法或实用程序用于过滤undefined
从 RxJS 可观察到的?这段代码具有我想要的行为:
obs.pipe(filter(x => x !== undefined))
一些替代方案是
obs.pipe(filter(x => x)) // for all falsy values
obs.pipe(filter(Boolean)) // for falsy variables using Boolean ctor
严格来说,单独使用过滤器来删除未定义的值并不能完成您需要的所有操作。它过滤掉未定义的值,但不会更改类型以指示未定义不再是可能的值。
在示例中:
const obs = new Subject<string | undefined>;
const stringObs = obs.pipe(filter(x => x !== undefined))
the stringObs
observable 仍然具有类型Observable<string | undefined>
.
要解决这个问题,您需要使用:
const stringObs = obs.pipe(filter(x => x !== undefined) as OperatorFunction<string | undefined, string>)
只有当您使用严格的空检查时,这才是真正的问题,但如果您这样做(并且可以说您应该这样做),那么创建自定义运算符突然变得更有意义!就像是
function filterNullish<T>(): UnaryFunction<Observable<T | null | undefined>, Observable<T>> {
return pipe(
filter(x => x != null) as OperatorFunction<T | null | undefined, T>
);
}
做这个工作。
然后您可以使用:
const stringObs = obs.pipe(filterNullish())
和类型stringObs
将Observable<string>
。让我印象深刻的是 Typescript 能够推断出类型T
正确。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)