我希望将数组转换为Observable<T[]>类型,并使用了rxjs方法"from“。但是它返回Observable<T>,有办法将数组转换为Observable<T[]>吗?
Player: Observable<T[]>;
convert(){
let tempArr:T[] = Object.values(data) as T[];
let Obsobj = from(tempArr);
this.Player = Obsobj;
}这是我得到的错误消息,Observable<T>不能分配到输入Observable<T[]>
编辑
即使使用以下代码片段,返回类型也不像预期的那样。
let $sub = new Subject<Array<T>>();
$sub.next(tempArr);
this.Player$ = $sub.asObservable();因为我希望返回的可观察类型如下所示。
Observable {_isScalar: false, source: Observable, operator: MapOperator}但返回如下。
Observable {_isScalar: false, source: Subject}编辑#2
完整的代码片段。
Player: Observable<B[]>;
convert(data: Dictionary<B>){
let tempArr:B[] = Object.values(data) as B[];
let $sub = new Subject<Array<B>>();
$sub.next(tempArr);
this.Player$ = $sub.asObservable();
}这里有什么问题?有什么帮助吗?
发布于 2019-07-15 03:15:15
这不是generics的工作方式。
您将不得不重构您的代码,以使其工作。
理想情况下,您的convert方法应该需要一个泛型T。
就像这样:
convert<T>(array: Array<T>): Observable<Array<T>> {
return of(array);
}当你打电话给convert时,你会这样称呼它:
this.convert<User>([{ firstName: `John`, lastName: `Doe` }])
.subscribe((userArray: Array<User>) => console.log(userArray));当您这样做时,您正在告诉您的convert函数,您希望类型T是一个User类型。
下面是一个完整的工作示例:
import { Component } from '@angular/core';
import { Observable, of } from 'rxjs';
interface User {
firstName: string;
lastName: string;
}
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
player: Observable<Array<User>>;
ngOnInit() {
this.convert<User>([{ firstName: `John`, lastName: `Doe` }])
.subscribe((userArray: Array<User>) => console.log(userArray));
}
convert<T>(array: Array<T>): Observable<Array<T>> {
return of(array);
}
}https://stackoverflow.com/questions/57032772
复制相似问题