Wie Sie erwähnt,
@Output() onChange:IMyEvent<ISliderItemData> = new Subject().delay(300).debounceTime(1000) ;// emits ISliderItemData
Sie nehmen einen Betreff und rufen dann den Verzögerungsoperator darauf auf. An diesem Punkt haben Sie kein Subjekt mehr - Sie haben stattdessen ein Observable. Jeder weitere Operator, der daran angekettet ist, wird ebenfalls Observables zurückgeben. Daher ist das Ergebnis Ihres Ausdrucks (d. H. Das Zeug auf der rechten Seite des '=') ein Observable. Daher erwartet Typescript, dass Ihre rechtsgültige Deklaration einen übereinstimmenden Typ aufweist, d. H. Ein Observable.
So ist die einfachste Form dieser wäre:
@Output() onChange: Observable = new Subject().delay(300).debounceTime(1000) ;// emits ISliderItemData
aber in Ihrem Fall, Sie möchten Ihre onChange Variable geben Sie die beobachtbare aussendet, um anzuzeigen, welche Art. Sie sollten Ihren Betreff auch so eingeben, dass er übereinstimmt.So wird daraus:
@Output() onChange: Observable<ISliderItemData> = new Subject<ISliderItemData>().delay(300).debounceTime(1000) ;// emits ISliderItemData
Die Realität ist, dass Typoskript ziemlich klug ist Arten über Folgern nach Verbrauch, so dass Sie könnte tatsächlich nutzen:
@Output() onChange = new Subject<ISliderItemData>().delay(300).debounceTime(1000) ;// emits ISliderItemData
Der Typoskript Compiler wird sehen, dass der Rückgabetyp Ihr Verzögerungsoperator (und der resultierende debounceTime-Operator) ist Observable und weist diesen Typ automatisch Ihrer onChange-Instanzvariablen zu.
Es ist persönliche Präferenz in diesem Fall, ob Sie den Typ auf die onChange-Variable setzen - es wird nicht vom Compiler benötigt, kann aber nützlich sein, um einige Code-Klarheit hinzuzufügen.
Warum nicht einfach 'Subject'? Was ist der Sinn von "IMyEvent"? –
jonrsharpe
ya das ist die erste Sache, die ich versuchte und bekam '' 'Fehler: (68, 5) TS2322: Typ 'Observable <{}>' ist nicht zu Typ 'Betreff' zuweisbar. Eigenschaft 'Beobachter' fehlt in Typ 'Observable <{}>' .''' ungerade Ich weiß:/ –
born2net
Ah, weil nach der Entprellung und der Verzögerung haben Sie kein Thema, haben Sie eine beobachtbare. Diese sollten stattdessen auf jedem Abonnement sein, das Ereignisse auf die Ausgabe pusht, was dann einfach ein 'EventEmitter' von' ISliderItemData' sein kann. . – jonrsharpe