返回 subject.asObservable() 时的 typescript 错误

标签 typescript compiler-errors observable typescript-generics

我有一个问题希望你能帮助我。谢谢

升级到 Typescript 2.9.1 后,编译器提示没有返回方法应该返回的类型。

当前代码:

public getCardPairingSession(sessionId:string):Observable<FundSourceCardSessionInterface> {
    const subject = new Subject();

    this.apiService
      .get(this.buildApiPath('card-session/' + sessionId))
      .subscribe(
        (response) => {
          subject.next(response.result);
        },
        (error) => {
          subject.error(error);
        }
      );
/* <-- ERROR: Type 'Observable<{}>' is not assignable to type 'Observable<FundSourceCardSessionInterface>' */
    return subject.asObservable();
  }

我的解决方案:

到目前为止,我正在通过做我的返回,虽然我不知道它是否正确,对我来说看起来很奇怪。
return  <Observable<FundSourceCardSessionInterface>> subject.asObservable();

问题:

如果之前使用 Typescript 2.3.4 工作正常,现在我不明白为什么它不能?,如果我已经在方法的开头指定了期望哪个返回,为什么我必须强制返回?基本上是重复代码:
public getCardPairingSession(sessionId:string):Observable<FundSourceCardSessionInterface> {

最佳答案

错误很明显:您将函数声明为返回 Observable<FundSourceCardSessionInterface>而你正在返回 Observable<{}> .我认为(不完全确定)之前,TypeScript 理解您正在返回 Observable<any> , 和 Observable<any>可分配给 Observable<FundSourceCardSessionInterface> .但是,{}不能分配给 FundSourceCArdSessionInterface .

更改您声明 Subject 的方式:

const subject = new Subject<FundSourceCardSessionInterface>();`

关于返回 subject.asObservable() 时的 typescript 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50022972/

相关文章:

typescript - Angular 2 Typescript 编译错误 TS2304?

c - 联盟没有名为 'B' 的成员

java - 将字符读入程序

javascript - 我试图理解这段 TypeScript 代码

javascript - 在浏览器中成功输出值后出现未定义错误

angularjs - 如何从 Controller 调用服务?

javascript - 在 Angular 7 中递归使用 expand() 和 concatMap()

不能用 GCC 包含文件

Angular2 可观察列表

typescript - TSeD 混合类型枚举和集合