我一直在研究如何更改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))
  );
}

10-06 11:51