angular - 类型“{}”缺少“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 个。
如何克服这个错误?并在缓存结果存在时立即返回。
解决方案
我认为问题出在您正在使用的 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);
}
推荐阅读
- r - GAMLSS BEINF 系列中的随机效应
- azure - Azure 追加策略不追加
- java - 使用 HTTP Java 客户端执行异步请求时如何处理错误?
- javascript - 如何获取对包含 JSON 的 url 的更新?
- node.js - Docker-Compose:无法将 NodeJS 与 Mongo 和 Redis 连接 [连接被拒绝]
- gps - 我可以为多个 GPS 接收器使用传感器融合并更好地估计位置吗?
- ruby-on-rails - Dry-Validation - 没有在规则上将 Float 隐式转换为 String
- java - 仅在数组中显示大于 45 的数字(我是一个完整的初学者)
- python - 如何在不使用 'tf.concat' 的情况下在 TensorFlow 中实现串联?
- angular - 以角度从数组中删除空的孩子