我一直在研究如何更改Observable的返回类型。
我正在使用Angular 5。
这是一个例子:
public getButterfly(): Observable<Butterfly[]> {
return http.get<Larva[]>('url').pipe(
map( larva => new Butterfly(larva.dna))
);
}
这段代码会导致错误,因为对于编译器来说,由于返回值的原因,幼虫对象是Butterfly并抛出错误:
“错误TS2339:类型'Butterfly []'上不存在属性'id'。”
看来 typescript 不允许在可观察的内部进行类型更改,但是如果您知道一种方式,我将不胜枚举。
感谢您对我的问题感兴趣。
最佳答案
map
运算符的类型定义如下:
export declare function map<T, R>(
project: (value: T, index: number
) => R, thisArg?: any): OperatorFunction<T, R>;
如您所见,您可以在
map
运算符调用中设置通用类型。在您的示例中,T
的值是Butterfly,而R
的值是Larva。public getButterfly(): Observable<Butterfly[]> {
return http.get<Larva[]>('url').pipe(
map<Larva, Butterfly>(larva => new Butterfly(larva.dna))
);
}