Подписка на Observable(тип объединения) дает NaN для строковых значений - PullRequest
0 голосов
/ 21 октября 2019

В компоненте у меня есть открытый член, определенный следующим образом:

public documentId$: Observable<number | string>;

По сути, идентификатор документа может быть целым числом или строкой. В ngOnInit у меня есть:

this.documentId$.subscribe(value => {
    // do some stuff with value
    // when value is a string, it is NaN
});

Однако это не работает, когда идентификатор документа является строкой. Это просто приходит как NaN. Разве наблюдаемые в союзных типах не работают? Есть ли способ обойти это?

1 Ответ

1 голос
/ 21 октября 2019

Я не вижу проблемы с использованием типа объединения. Проверьте данные, которые вы получаете. Это работает: https://stackblitz.com/edit/angular-rur73e

import { Component } from '@angular/core';
import { Observable } from 'rxjs';
import { Subject } from 'rxjs';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  {

  private subject = new Subject<number | string>();
  public documentId$: Observable<number | string> = this.subject.asObservable();

  ngOnInit() {
  this.documentId$.subscribe(value => {
    // do some stuff with value
    // when value is a string, it is NaN
    console.log(value);
  });
  this.subject.next("abc");
  this.subject.next(3);
  this.subject.next(Date.now());
  }
}

В консоли выводится:

abc
3
1571682486949
...