我正在使用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.
在我进行更新之前,一切正常。
答案 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;