reporter () ne permet plus le type de retour observable

voix
3

Aujourd'hui, je l'ai fait une mise à niveau angulaire 6 à 7

Avec elle, je devais passer rxjs de 6.1.0 à 6.3.3 et tapuscrit de 2.7.2 à 3.1.1

Et maintenant, cette méthode d'effets NGRX est de lancer une erreur de tapuscrit:

  @Effect()
  init$ = defer(() => {
    const userData = localStorage.getItem('user');
    return (userData)
      ? of(new Login(JSON.parse(userData)))
      : of(new Logout());
  });

Argument de type « () => Observable | Observable « est incessible au paramètre de type » () => vide | Abonnable | Abonnable | PromiseLike | InteropObservable.

Il semble que je ne peux plus utiliser defer d'envoyer une action comme ça, donc je ne sais pas comment je peux écrire des effets d'initialisation aller de l'avant.

Je dois juste attendre que le magasin à initialiser, donc dans cette méthode que je remettais l'exécution jusqu'à ce que les effets ont souscrit au flux d'actions.

Est-ce que quelqu'un sait comment je peux travailler autour de cela?

METTRE À JOUR:

J'ai aussi trouvé un Stackblitz exemple qui tire parti ROOT_EFFECTS_INIT, mais en raison du fait que je suis dans un module de fonction, cela ne fonctionne pas ( question ici )

import { ROOT_EFFECTS_INIT } from '@ngrx/effects';

@Effect()
  init$ = this.actions$
    .ofType(ROOT_EFFECTS_INIT)
    .pipe(
      map(() => {
        const userData = localStorage.getItem('user');
        return (userData)
          ? of(new Login(JSON.parse(userData)))
          : of(new Logout())
      })
    );
Créé 20/10/2018 à 03:00
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
5

Ceci est une limitation dactylographiée. Vous pouvez contourner le problème en spécifiant explicitement le type de retour dans la fonction de flèche:

@Effect()
init$ = defer((): Observable<Action> => { // HERE
  const userData = localStorage.getItem('user');
  return (userData)
    ? of(new Login(JSON.parse(userData)))
    : of(new Logout());
});

Ou, plus précisément:

@Effect()
init$ = defer((): Observable<Login | Logout> => { // HERE
  const userData = localStorage.getItem('user');
  return (userData)
    ? of(new Login(JSON.parse(userData)))
    : of(new Logout());
});

Le problème est que sans le type de retour explicite, le type de retour de la fonction de flèche est déduit être:

Observable<Login> | Observable<Logout>

plutôt que:

Observable<Login | Logout>

Fait intéressant, bien qu'il soit en effet une limitation dactylographiée, ce RxJS PR va résoudre le problème et voir le bon type déduit.

Créé 20/10/2018 à 03:33
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more