typescript - Εξαγωγή ενός προσαρμοσμένου τελεστή RxJS σε μια βιβλιοθήκη Angular
Ο παρακάτω προσαρμοσμένος τελεστής RxJS (στην πραγματικότητα απλώς ένα ισοδύναμο .filter για επίδειξη) δηλώνεται αυτή τη στιγμή σε ένα συστατικό Angular 4.0.0-rc.2.
declare module 'rxjs/Observable' {
interface Observable<T> {
restrictToCommand<U>(f: (x: T) => U): Observable<U>;
}
}
Observable.prototype.restrictToCommand = function (cmd) {
return new Observable((observer) => {
const obs = {
next: (x) => {
if (x.command === cmd) {
observer.next(x);
}
},
error: (err) => observer.error(err),
complete: () => observer.complete()
};
return this.subscribe(obs);
});
};
Αυτό λειτουργεί καλά. Ωστόσο, θα ήθελα να εξάγω αυτή τη δήλωση σε μια βιβλιοθήκη που είναι υπεύθυνη για την εξωτερική επικοινωνία. Η κύρια εισαγωγή αυτής της βιβλιοθήκης είναι μια μοναδική υπηρεσία.
Πώς να εξάγετε σωστά την επέκταση πρωτοτύπου και τη δήλωση μονάδας από μέσα σε αυτή τη βιβλιοθήκη;
Απάντηση #1
Αν ο τελεστής δεν χρησιμοποιείται από τη βιβλιοθήκη η ίδια και υπάρχει για την ευκολία του χρήστη, μπορεί να ακολουθήσει τον τρόπο που πηγαίνει το RxJS με rxjs/add/operator/....
Ο ορισμός του τελεστή μπορεί να μετακινηθεί σε ξεχωριστό αρχείο στη ρίζα του πακέτου (restrictToCommandOperator.js και restrictToCommandOperator.d.ts) και να εισαχθεί όπως
import 'packagename/restrictToCommandOperator';
Πρέπει να σημειωθεί ότι αυτό θα λειτουργήσει ομαλά μόνο αν το πακέτο δεν έχει εξάρτηση rxjs με περιορισμούς έκδοσης. Αν έχει, υπάρχει πιθανότητα να υπάρχουν πολλές εκδόσεις του πακέτου RxJS στο έργο του χρήστη, και το restrictToCommandOperator δεν θα επεκτείνει το επιθυμητό Observable.
