首页 > 解决方案 > 类型“{}”缺少“FooModelDTO”类型的以下属性

问题描述

我正在使用 anObservable从服务中返回一个对象,该服务检查其项目是否存在于缓存中,否则它会调用 http 请求并返回 http's Observable,以防该项目存在于缓存中,我正在使用 rxjs from

foo.service.ts

private foos: FooModelDTO[] = [];
getFoo(id: string) : Observable<FooModelDTO> {
    var foo = this.foos.find(x => x.id === id);
    if (foo) {
        return from(foo);    --> error!        
    }            

    return this._foosAPIService.getFooById(id);
}

foo-api.service.ts

getFooById(id: string) : Observable<FooModelDTO> {
    return this._httpClient.get<FooModelDTO>(
        this._configService.resourceApiURI + 'foos/' + id
    );
}

foo.model.ts

export class FooModelDTO {
  public id: string;

  constructor (
    id: string
  ) 
  {
    this.id = id;
    // other properties...
  }
}

错误 TS2322:类型 'Observable<{}>' 不可分配给类型 'Observable'。类型“{}”缺少类型“FooModelDTO”的以下属性:id、imagePath、updateDate、title 和另外 6 个。

如何克服这个错误?并在缓存结果存在时立即返回。

标签: angularrxjsobservable

解决方案


我认为问题出在您正在使用的 Observable 中。
from用于将数组、promise 或 iterable 转换为 observable。

您应该使用of而不是from.

import { of } from 'rxjs';

private foos: FooModelDTO[] = [];
getFoo(id: string) : Observable<FooModelDTO> {
    const foo = this.foos.find(x => x.id === id);
    if (foo) {
        return of(foo);       
    }            

    return this._foosAPIService.getFooById(id);
}

推荐阅读