[英]RXJS Observable.of() as a Observable<HttpEvent<any>> in HttpInterceptor
我有一個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:>鍵入“可觀察的”> | “可觀察”不能分配給>“可觀察>”類型。 類型“可觀察”不能分配給類型>“可觀察>”。 類型“ string”不可分配給類型“ HttpEvent”。
在Angular Docs中幾乎可以找到相同的示例。
這里的問題是of(cachedResponse)
不是Observable<HttpEvent<any>>
而是Observable<string>
。
我嘗試了很多方法,但我想不出什么是最好的解決方案。 是否有可能以任何方式將緩存的數據轉換為Observable<HttpEvent<any>>
類型,或者可能還有另一種好的方法來對其進行修復? 我知道我可以為我的情況提供適合自己的HttpInterceptor接口,甚至可以簡單地刪除HttpInterface引用,但是這些可能不是最佳解決方案,尤其是后者。 有人嗎
如果您不能更改CacheService
的類型,這對您來說是我的問題,那么您可以使用類型斷言:
const cachedResponse = this.cache.restore(req) as HttpEvent<any>;
需要注意的是一個類型的斷言不修改數據; 它只是告訴Typescript編譯器您知道類型就是您聲明的類型。
但是,理想情況下, CacheService#restore
是通用定義的,在這種情況下
const cachedResponse = this.cache.restore<HttpEvent<any>>(req);
會工作。 從功能上講,它是完全相同的,沒有任何區別,但它取決於要正確鍵入的restore
。 由於我不知道您使用的CacheService
是什么,所以我不知道情況是否如此。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.