我有一个Angular的HttpInterceptor看起来像这样:
(...)
export class CacheInterceptor implements HttpInterceptor {
constructor(private cache: CacheService) {}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const cachedResponse = this.cache.restore(req); // Object with cached data
return cachedResponse ?
of(cachedResponse): this.sendRequest(req, next);
(...)
}
一般来说,它似乎最终起作用,但Angular的编译器抱怨显示错误的类型不匹配:
cache.interceptor.ts(27,5)中的错误:错误TS2322:&gt;类型&#39;可观察&gt; |观察到的&#39;不能分配给&gt;类型&#39; Observable&gt;&#39;。 输入&#39; Observable&#39;不能分配给&gt;&#39; Observable&gt;&#39;。 输入&#39; string&#39;不能分配给&#39; HttpEvent&#39;。
几乎相同的例子可以在Angular Docs中找到。
此处的问题是of(cachedResponse)
不是Observable<HttpEvent<any>>
类型,而是Observable<string>
。
我尝试了很多方法,但我无法想到最适合的方法。是否有可能以任何方式将缓存数据转换为Observable<HttpEvent<any>>
类型,或者可能有另一种好方法来修复它?我知道我可以为我的案例提供我自己的HttpInterceptor接口和正确的类型,甚至只是删除HttpInterface引用,但这些可能不是最好的解决方案,尤其是后者。任何人
答案 0 :(得分:0)
如果您无法更改CacheService
的输入,这就是您的问题,那么您可以使用类型断言:
const cachedResponse = this.cache.restore(req) as HttpEvent<any>;
请注意,类型断言不修改数据;它只是告诉Typescript编译器你知道类型是你声称它的类型。
但理想情况下,CacheService#restore
通常是定义的,在这种情况下
const cachedResponse = this.cache.restore<HttpEvent<any>>(req);
会奏效。从功能上讲,它完全相同并没有区别,但它取决于restore
是否被正确输入。由于我不知道你的CacheService
是什么,我不知道是否是这种情况。