typescript - vad förväntar sig take() på en union av Observable?


Nå, den här överraskade mig :

import {Observable, take} from 'rxjs';

declare const obs$: Observable<null> | Observable<string>;    
obs$.pipe(take())

kastar detta magnifika :

Expected 0 arguments, but got 1.(2554)
Expected 1 arguments, but got 0.(2554)

Jag vet att den grundläggande orsaken är att metoden på en unionstyp tar snittet av parametertyperna. Men jo, den här är ... nyfiken.

Den uppenbara lösningen är att använda Observable<string | null>, men jag letar efter orsaken till detta fel.

Lekplats

Svar #1

Okej, jag hade grundproblemet (skärning av parametrar på en metod av en union) men tillämpade det inte på rätt metoder.

pipe() på en union av inkompatibla observerbara tar inga parametrar, därav det första felet.

take() tar alltid en parameter, därav det andra felet.