如何解决Angular 中 GraphQL 的 Apollo 的 watchQuery().valueChanges 的正确返回类型是什么?
我们使用 Apollo Angular 连接到 GraphQL API。这工作正常。我现在想创建一个抽象 watchQuery
方法的 API 服务。
这很好用,直到我将返回类型添加到方法中。类型提示表示 valueChanges
的返回类型是 Observable<ApolloQueryResult<any>>
。但是当我将它添加为函数的返回类型时,我收到此错误:
属性 '['@@observable']' 在类型 'Observable
导入的建议是这三个 - 但没有一个起作用并导致相同的错误:
import { ApolloQueryResult } from '@apollo/client/core/types';
import { ApolloQueryResult } from '@apollo/client/core';
import { ApolloQueryResult } from '@apollo/client';
这是服务的样子:
import { Injectable } from '@angular/core';
import { Apollo,WatchQueryOptions } from 'apollo-angular';
import { ApolloQueryResult } from '@apollo/client/core/types';
@Injectable({
providedIn: 'root'
})
export class ApiService {
constructor(
private apollo: Apollo
) { }
watchQuery(options: WatchQueryOptions<any>): Observable<ApolloQueryResult<any>> {
return this.apollo.watchQuery<any>(options).valueChanges;
}
}
解决方法
tl;dr:确保将 import { Observable } from 'rxjs';
添加到您的服务中。
在 apollo-angular 中,valueChanges
从 rxjs (link to source) 返回类型 Observable
。
但是,如果您在服务中声明的 Observable
上转到定义,则会将您带到 @apollo/client 添加为全局类型的内容(link to source)。
现在,我不明白这个全局环境声明的确切用途。但是,通过不在您的文件中从 rxjs 导入真正的 Observable
,您的服务被声明为返回全局 @apollo/client,而实际上 返回 rxjs 一个。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。