rxjs - Hvordan bruke rxjs6 partition i typescript?
Når jeg prøver å bruke rxjs6 partition i typescript, oppstår det en type-mismatch-feil. Også eksemplet fra den offisielle dokumentasjonen gir den feilen. Jeg tror jeg må caste noe, men jeg vet ikke hva. Noen forslag?
import {fromEvent} from 'rxjs';
import {partition} from 'rxjs/operators';
document.body.innerHTML = "<DIV width=100 height=100></DIV>"
//Example Code from https://rxjs-dev.firebaseapp.com/api/operators/partition
const clicks = fromEvent(document, 'click');
const parts = clicks.pipe(partition(ev => ev.target.tagName === 'DIV'));
const clicksOnDivs = parts[0];
const clicksElsewhere = parts[1];
clicksOnDivs.subscribe(x => console.log('DIV clicked: ', x));
clicksElsewhere.subscribe(x => console.log('Other clicked: ', x));
Feil :
Argument av typen 'UnaryFunction, [Observable, Observable]' kan ikke tilordnes til parameter av typen 'OperatorFunction'. Typen '[Observable, Observable]' kan ikke tilordnes til typen 'Observable'. Egenskapen '_isScalar' mangler i typen '[Observable, Observable]'.
Se https://stackblitz.com/edit/typescript-fdqhws
Svar #1
Typene for pipe er for øyeblikket ikke fleksible nok til å støtte partition som en pipebar operator, og dokumentasjonen for partition er ikke veldig hjelpsom på tidspunktet for skriving: https://github.com/ReactiveX/rxjs/issues/2995
Jeg tror det er oppfordringer om at det skal gjøres til en statisk funksjon i RxJS7: https://github.com/ReactiveX/rxjs/issues/3797
Som en midlertidig løsning, prøv dette:
const clicks = fromEvent(document, 'click');
const parts = partition(ev => ev.target.tagName === 'DIV')(clicks);
