Angular 7.2.5将订阅分配给EventEmitter失败错误TS2740

时间:2019-02-20 11:47:20

标签: angular typescript rxjs

我正在使用ngx-translate与angular并创建了基于平移管道的Pipe。 现在,我已使用TypeScript 3.2.4从Angular 7.0更新到7.2.5。 以下代码给出了一个错误:

...

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 :(得分:2)

您不应在管道内使用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;