Фильтрация и преобразование поведения rxjsSubject - PullRequest
0 голосов
/ 29 июня 2019
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'

Можно ли изменить тип потока после фильтрации?

1 Ответ

1 голос
/ 29 июня 2019

Если вы используете охрану типа , 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), но это немного менее читабельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...