const subject = new BehaviorSubject<number | null>(null);
subject.next(1);
subject.next(2);
subject.pipe(
filter(x => x !== null),
take(1), // <--- VSCode shows an error here
switchMap((x: number) => of(10)),
);
过滤后,流的类型仍为number | null
(而不是number
)。
因此VSCode显示take
的错误:
类型'null'不能分配给类型'number'
过滤后是否可以更改流的类型?
答案 0 :(得分:1)
如果您使用type guard,则filter
的键入正确:
const isNumber = (n: number | null): n is number => n !== null
subject.pipe(
filter(isNumber),
take(1),
switchMap((x: number) => of(10)),
);
您也可以在filter((x): x is number => x !== null)
中使用类型谓词,但可读性较低。