在TypeScript(RxJS)中使用子类时键入变量

时间:2019-02-20 16:05:46

标签: javascript typescript rxjs

使用RxJS编写Angular测试时遇到问题。

我有一个变量,用作模拟提供程序(actions $),类型为“可观察”。现在,我为其分配一个子类的实例(ReplaySubject)。但是现在“ next”方法是未知的(至少在Typescript中是未知的),因为它不是“ Observable”提供的,因为它来自子类“ Subject”之一。

如何正确键入变量“ actions $”,或如何正确强制转换以修复错误消息?

在线示例:https://ngrx.io/guide/effects/testing 参见第12行与第41行

RxJS实现

export declare class ReplaySubject<T> extends Subject<T> {
   ...
}

export declare class Subject<T> extends Observable<T> implements SubscriptionLike {
    ...
    next(value?: T): void;
    ...
}

我的代码

let actions$: Observable<any>;

actions$ = new ReplaySubject(1);

// Property 'next' does not exist on type 'Observable<any>'.
actions$.next(new someThing());

1 个答案:

答案 0 :(得分:0)

您应该以{{1​​}}的形式输入Subject<any>,或者,如果您想获得更多的特异性,请输入ReplySubject<any>Subject扩展了Observable,因此,如果您使用的是hot,它将适用于coldjasmine-marbles函数。

关于您引用的文档,我怀疑将actions键入为Observable是印刷错误。