RxJS报错:Observable<unknown>无法赋值给OperatorFunction<Object, unknown>
问题解决:Angular路由守卫中Observable处理的类型错误
错误原因
Angular的HttpClient.get()默认返回Observable<unknown>,未指定响应类型时,TypeScript无法推断map操作符中data的结构,导致类型不匹配报错。
解决方案
方法1:定义响应类型接口(推荐)
先创建对应后端返回结构的接口,再给get方法指定泛型类型:
// 定义响应结构接口 interface LobbyAccessResponse { allowAccess: boolean; } // 修正后的方法 isAccessToLobby(): Observable<boolean> { return this.http .get<LobbyAccessResponse>(`${environment.domain}${BackendRoutes.Lobby}`, this.httpOptions) .pipe(map((data) => data.allowAccess)); }
方法2:直接在map中做类型断言
如果不想单独定义接口,也可以在map的参数里直接断言data的类型:
isAccessToLobby(): Observable<boolean> { return this.http .get(`${environment.domain}${BackendRoutes.Lobby}`, this.httpOptions) .pipe(map((data: { allowAccess: boolean }) => data.allowAccess)); }
关键说明
之前仅给方法返回值定义Observable类型无法解决问题,核心是要让TypeScript明确知道HTTP请求返回的数据结构,这样map操作符才能正确处理data.allowAccess的访问。
内容的提问来源于stack exchange,提问作者Vladimir
相关产品推荐
相关产品推荐

