Ошибка трубопровода - Наблюдаемый <any>не присваивается типу Наблюдаемый <number> - PullRequest
0 голосов
/ 05 сентября 2018

Почему возвращение interval(500) приводит к ошибке следующего типа в приведенном ниже коде?

const source = timer(0, 5000);
const example = source.pipe(switchMap(() => interval(500)));
const subscribe = example.subscribe(val => console.log(val));

StackBlits

Аргумент типа 'UnaryFunction , Observable <номер >>' нельзя назначить параметру типа 'OperatorFunction'.

Типы параметров «источник» и «источник» несовместимы.

Тип «Наблюдаемый <любой>» нельзя назначить типу «Наблюдаемый <номер>».

Свойство 'source' защищено, но тип 'Observable ' не является классом, производным от 'Observable '.

Это первая из switchMap пример , найденный на сайте learnrxjs.io.

1 Ответ

0 голосов
/ 05 сентября 2018

Проблема в том, что timer определен для выдачи числовых значений. Таким образом, source также будет предполагать, что будут выданы числовые значения. Однако switchMap не делает никаких предположений о том, какой тип будет испускаться возвращаемой наблюдаемой (отсюда any). Это означает, что ваш источник переходит от испускания чисел к испусканию чего-либо вообще.

Простое решение это

import { timer, interval } from 'rxjs';
import { switchMap } from 'rxjs/operators';

//emit immediately, then every 5s
const source = <any>timer(0, 5000); //Here, we say that source can emit anything
//switch to new inner observable when source emits, emit items that are emitted
const example = source.pipe(switchMap(() => interval(500)));
//output: 0,1,2,3,4,5,6,7,8,9...0,1,2,3,4,5,6,7,8
const subscribe = example.subscribe(val => console.log(val));
...