Angular 7.2.5 назначить подписку на EventEmitter не удается, ошибка TS2740 - PullRequest
0 голосов
/ 20 февраля 2019

Я использую ngx-translate с angular и создаю трубу на основе трансляционной трубы.Теперь я обновил с Angular 7.0 до 7.2.5 с TypeScript 3.2.4.И следующий код выдает ошибку:

...

onTranslationChange: EventEmitter<TranslationChangeEvent>;


if (!this.onTranslationChange) {
      this.onTranslationChange = this.translate.onTranslationChange.subscribe((event: TranslationChangeEvent) => {
        if (this.lastKey && event.lang === this.translate.currentLang) {
          this.lastKey = null;
          this.updateValue(query);
        }
      });
    }

Это дает ошибку:

error TS2740: Type 'Subscription' is missing the following properties from type 'EventEmitter<TranslationChangeEvent>': __isAsync, emit, subscribe, observers, and 18 more.

До моего обновления все работало нормально.

1 Ответ

0 голосов
/ 20 февраля 2019

Вы не должны использовать EventEmitter внутри канала.Они используются исключительно для декоратора @Ouput() в директивах и компонентах.Кроме того, вызов .subscribe возвращает Subscription.Это не наблюдаемое, а подписка на наблюдаемое.

EventEmitter - это то, что расширяет Observable, поэтому я предполагаю, что вы хотите, чтобы код был таким:

readonly onTranslationChange = this.translate.onTranslationChange.pipe(
  tap((event: TranslationChangeEvent) => {
    if (this.lastKey && event.lang === this.translate.currentLang) {
      this.lastKey = null;
      this.updateValue(query);
    }
  })
);

Если это не так, и вы просто хотите сохранить подписку, измените ее на:

onTranslationChange: Subscription;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...