【发布时间】:2017-10-27 00:56:43
【问题描述】:
当我在做一些项目时,我遇到了这种类型Subscriber<T>。我无法声明具有适当类型的属性。
问题是当我这样做时,
let sub = this._api.getDefaultMedia().subscriptions.play.subscribe(
() => {
this.play();
}
);
console.log(sub);
它会打印出Subscriber 类型的以下内容
但是如果我尝试分配一个Subscription 类型的变量
private subPlay : Subscription;
this.subPlay = this._api.getDefaultMedia().subscriptions.play.subscribe(
() => {
this.play();
}
);
它给了我以下错误 Type Subscription is not assignable to type Subscription
尽管它说它正在返回 Subscription,但当我执行控制台时,它的类型是 Subscriber。
那么这两者有什么不同或相似之处呢?
【问题讨论】:
-
你的进口是什么?
this._api.getDefaultMedia().subscriptions.play的类型是什么?关于你的最后一个问题,这只是多态性:订阅者扩展订阅。租一辆车时,你不会惊讶于福特,因为福特就是一辆汽车。这里也一样。 -
this._api.getDefaultMedia().subscriptions.play正在返回Observable<any>。这是一个videogular2事件。 -
你的进口是什么?
-
由于某种原因无法编辑我的问题,不知道为什么会这样。
import {VgAPI} from "videogular2/src/core/services/vg-api"; import {Observable, Subscription} from "rxjs"; -
永远不要从 rxjs 导入。这将导致整个库嵌入到您的应用程序中,尽管您可能只使用它的一些类作为运算符。使用
import { Observable } from 'rxjs/Observable'; import { Subscription } from 'rxjs/Subscription';
标签: angular rxjs subscription rxjs5 angular2-observables