予想される行動
apollo-link-errorによって作成されたApolloLink
タイプonError
ApolloLink
は、apollo-link-httpおよびapollo-clientによって使用される
実際の動作
結果のapollo-link- *パッケージには、互換性のない2つのApolloLink
タイプがあるようです。
以下の例では、マークされた場所でTypeScriptエラーが返されますが、マークされた場所にas any
を追加すると期待どおりに機能します。
_単純_再生産
import { InMemoryCache } from 'apollo-cache-inmemory'
import ApolloClient from 'apollo-client'
import { ApolloLink } from 'apollo-link'
import { onError } from 'apollo-link-error'
import { createHttpLink } from 'apollo-link-http'
const httpLink = createHttpLink({ uri: apiUrl })
const authLink = new ApolloLink((operation, forward) => {
const token = getToken()
if (token) {
operation.setContext({
headers: {
Authorization: `Bearer ${token}`,
},
})
}
return forward(operation)
})
const logLink = onError(error => console.error('Apollo Error', error)) // as any
const link = logLink.concat(authLink.concat(httpLink)) // as any
/*
TS2345: Argument of type 'ApolloLink' is not assignable to parameter of type 'ApolloLink | RequestHandler'.
Type 'ApolloLink' is not assignable to type 'RequestHandler'.
Type 'ApolloLink' provides no match for the signature '(operation: Operation, forward?: NextLink): Observable<FetchResult<Record<string, any>, Record<string, any>>>'.
*/
export const graphql = new ApolloClient({
cache: new InMemoryCache(),
link,
})
/*
TS2345: Argument of type '{ cache: InMemoryCache; link: ApolloLink; }' is not assignable to parameter of type 'ApolloClientOptions<NormalizedCacheObject>'.
Types of property 'link' are incompatible.
Type 'ApolloLink' is not assignable to type 'ApolloLink'. Two different types with this name exist, but they are unrelated.
Types of property 'split' are incompatible.
Type '(test: (op: Operation) => boolean, left: ApolloLink | RequestHandler, right?: ApolloLink | Reques...' is not assignable to type '(test: (op: Operation) => boolean, left: ApolloLink | RequestHandler, right?: ApolloLink | Reques...'. Two different types with this name exist, but they are unrelated.
Types of parameters 'left' and 'left' are incompatible.
Type 'ApolloLink | RequestHandler' is not assignable to type 'ApolloLink | RequestHandler'. Two different types with this name exist, but they are unrelated.
Type 'ApolloLink' is not assignable to type 'ApolloLink | RequestHandler'.
Type 'ApolloLink' is not assignable to type 'RequestHandler'.
*/
発行ラベル
この問題も発生しています。
こっちも一緒...
@iki興味深い、問題を開いてくれてありがとう! apollo-link-errorとapolo-link-httpを最新バージョンに更新しましたか? https://github.com/evans/apollo-link-reproductions/tree/538で「npmruncompile」を実行すると、タイプエラーは表示されません。 ApolloLink
のダックタイピングは同じである必要があるため、タイプは機能するはずです。 クローンできる複製リポジトリはありますか? TSの最小バージョンを宣言する必要があるかもしれませんか?
この問題が発生しましたが、 package.json
のapollo-link
のバージョンを次のように修正することで、問題が解決したようです。
{
"dependencies": {
"dependencies": {
"apollo-cache-inmemory": "^1.1.12",
"apollo-client": "^2.2.8",
"apollo-codegen": "^0.19.0",
"apollo-link": "^1.2.1",
"apollo-link-batch-http": "^1.2.1",
"apollo-link-http": "^1.5.3",
"apollo-link-retry": "^2.2.2"
},
"resolutions": {
"apollo-link": "1.2.1"
}
}
graphql
同様のことをして、コピーが1つだけ存在するようにする必要がありました。
これは最新のリリースで修正されるはずです。 # 500によって閉じられ、
@evans私はまだ待っている[email protected]私たちはこの問題の修正を得るように、リリースされます。 それは私が他のアポロパッケージをアップグレードするのを妨げています。
ここでも同じで、1.0.10の公開を待っています
@ravishivt @sccdGyan申し訳ありません! そこで何が起こったのかわかりません。 物事は[email protected]で整理する必要があります
私は同様の問題を抱えています:
関連する依存関係:
"dependencies": {
"@apollo/client": "^3.0.0-beta.19",
"apollo-link-ws": "^1.0.19",
"graphql": "^14.5.8",
"subscriptions-transport-ws": "^0.9.16",
...
},
コード:
import {
ApolloClient,
InMemoryCache,
HttpLink,
ApolloLink,
Operation,
NextLink,
split,
getMainDefinition
} from '@apollo/client'
import { WebSocketLink } from 'apollo-link-ws';
const wsLink = new WebSocketLink({
uri: config.backendWSApiUrl,
options: {
reconnect: true
}
})
const httpLink = new HttpLink({
uri: config.backendHttpApiUrl
})
const link = split(
// split based on operation type
({ query }) => {
const definition = getMainDefinition(query);
return (
definition.kind === 'OperationDefinition' &&
definition.operation === 'subscription'
);
},
wsLink,
httpLink,
);
Typescriptエラー:
Argument of type 'WebSocketLink' is not assignable to parameter of type 'ApolloLink | RequestHandler'.
Type 'WebSocketLink' is missing the following properties from type 'ApolloLink': onError, setOnErrorts(2345)
3.0ベータ版の@mnesarcoと同じ
私は同じに遭遇しています
"@apollo/client": "~3.0.0-beta.29
および"@apollo/link-error": "^2.0.0-beta.3",
ApolloLink.from([errorLink, httpLink])
@smeevilこれに対する修正を見つけましたか、私も同じように直面しています
いいえ
これを再開する必要がありますか?
最新のApolloクライアント3.0.0ベータ32バージョンを更新すると、問題が解決しました
1.1.12から[email protected]に更新すると
今使っている私にとってはすべて良い
"@apollo/client": "^3.0.0-beta.37",
"@apollo/link-context": "^2.0.0-beta.3",
"@apollo/link-error": "^2.0.0-beta.3",
"@apollo/link-retry": "^2.0.0-beta.3",
"@apollo/link-ws": "^2.0.0-beta.3",`
今使っている私にとってはすべて良い
"@apollo/client": "^3.0.0-beta.37", "@apollo/link-context": "^2.0.0-beta.3", "@apollo/link-error": "^2.0.0-beta.3", "@apollo/link-retry": "^2.0.0-beta.3", "@apollo/link-ws": "^2.0.0-beta.3",`
ありがとう! @ apollo / clientを3.0.0-beta.39に更新すると、このエラーが発生します。
使用して@apollo/link-error
の代わりにapollo-link-error
私のために働きました。
私はApolloを初めて使用しますが、Apolloサーバーガイドに従ってこのエラーが発生しました。このガイドでは、Apolloリンクライブラリを直接使用せずにapollo-boost
からApolloClient
をインポートするように指示されています。 私のコードは次のようになります:
import ApolloClient from 'apollo-boost';
const client = new ApolloClient({
uri: "/api/graphql",
});
const App = ({ Component, pageProps }: AppProps) => {
return (
<ApolloProvider client={client}>
<Component {...pageProps} />
</ApolloProvider>
)
}
@apollo/client
をインストールし、次のようにリファクタリングすることで修正できました。
import { ApolloClient, HttpLink, InMemoryStore } from '@apollo/client';
const client = new ApolloClient({
cache: new InMemoryStore(),
link: new HttpLink({ uri: "/api/graphql" })
});
const App = ({ Component, pageProps }: AppProps) => {
return (
<ApolloProvider client={client}>
<Component {...pageProps} />
</ApolloProvider>
)
}
ありがとう! @ apollo / clientを3.0.0-beta.39に更新すると、このエラーが発生します。
ありがたいことに、これはバージョン@ apollo / clientによって3.0.0-beta.41に修正されたようです。
今日、新しい3.0.0-beta.43を試したときに、この問題が発生しました。
それが他の誰かを助ける場合に備えて、どのように解決して共有することができました。
私の場合、package.jsonの「resolutions」フィールドをbeta.43に指定するか、または、 yarn.lock
を削除して再インストールすると、これが整理されます。
3.0.0-beta.44。 package.jsonに解像度フィールドを追加してyarn.lockファイルを削除しようとしましたが、どちらも機能しませんでした。
私にとって、クライアントとリンクエラーをアップグレードすると、問題が修正されました。
"@ apollo / client": "^ 3.0.0-beta.49"、 "@ apollo / link-error": "^ 2.0.0-beta.3"
私は〜に乗っています
"@apollo/client": "^3.0.0-beta.50",
"@apollo/link-context": "^2.0.0-beta.3",
まだこの問題があります。
私は〜に乗っています
"@apollo/client": "^3.0.0-beta.50", "@apollo/link-context": "^2.0.0-beta.3",
まだこの問題があります。
私のプロジェクトでは、package.jsonを注意深く確認し、Apolloが3.0であることを確認してから、yarn.lockを削除してyarnを再度インストールしました。
@onpawsに感謝しgraphql-codegen
)があり、それらを削除するつもりがないことだと思います。 しかし、コード内の古いものを_インポート_していないので、Typescriptがそれらについて混乱する理由がわかりません。 しかし、私はTypescriptを初めて使用するので、これは「私」の問題である可能性があります。 ばかげているように見えますが、 as any
を介してキャストすれば、すべて正常に動作します。
export const client = new ApolloClient({
cache: new InMemoryCache(),
link: authenLink.concat(httpLink as any) as any
});
最も参考になるコメント
この問題も発生しています。