Erwartetes Verhalten
Der Typ von ApolloLink
der von apollo-link-error onError
erstellt wurde, sollte mit ApolloLink
ĂŒbereinstimmen, der von apollo-link-http und apollo-client verwendet wird.
TatsÀchliches Verhalten
Es scheint zwei inkompatible ApolloLink
Typen in den Ergebnispaketen apollo-link-* zu geben.
Das folgende Beispiel gibt TypeScript-Fehler an markierten Stellen zurĂŒck, funktioniert aber wie erwartet, wenn as any
an markierten Stellen hinzugefĂŒgt wird.
Eine _einfache_ Reproduktion
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'.
*/
Problemetiketten
Ich sehe dieses Problem auch.
Hier gilt das gleiche...
@iki Interessant, danke fĂŒr das Ăffnen des Themas! Haben Sie apollo-link-error und apollo-link-http auf die neueste Version aktualisiert? Wenn Sie 'npm run compile' in https://github.com/evans/apollo-link-reproductions/tree/538 ausfĂŒhren, sehe ich keine Typfehler. Die Typen sollten funktionieren, da die Duck-Typisierung von ApolloLink
identisch sein sollte. Haben Sie ein Reproduktions-Repository, das ich klonen könnte? Wir mĂŒssen möglicherweise eine Mindestversion von TS deklarieren?
Ich hatte dieses Problem und habe es anscheinend gelöst, indem ich die Version von apollo-link
in package.json
wie folgt korrigiert habe:
{
"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"
}
}
Ich musste mit graphql
etwas Ăhnliches machen, um sicherzustellen, dass nur eine Kopie davon existiert.
Dies sollte in der neuesten Version behoben sein. Siehe #599, die von #600 geschlossen und in [email protected] veröffentlicht wurde
@evans Ich warte immer noch auf die Veröffentlichung von
Gleiches hier, warten auf 1.0.10 veröffentlichen
@ravishivt @sccdGyan Tut [email protected] aussortiert werden
ich habe ein Àhnliches Problem:
Relevante AbhÀngigkeiten:
"dependencies": {
"@apollo/client": "^3.0.0-beta.19",
"apollo-link-ws": "^1.0.19",
"graphql": "^14.5.8",
"subscriptions-transport-ws": "^0.9.16",
...
},
Code:
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,
);
Schreibfehler:
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)
Wie @mnesarco mit der 3.0-Beta
Dasselbe erlebe ich mit
"@apollo/client": "~3.0.0-beta.29
und "@apollo/link-error": "^2.0.0-beta.3",
mit ApolloLink.from([errorLink, httpLink])
@smeevil hast du eine Lösung dafĂŒr gefunden, ich stehe auch vor dem gleichen
Nö
Soll das wieder geöffnet werden?
Das Aktualisieren der neuesten Apollo-Client 3.0.0 Beta 32-Version hat das Problem fĂŒr mich gelöst
Das Update auf
Alles gut fĂŒr mich jetzt mit
"@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",`
Alles gut fĂŒr mich jetzt mit
"@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",`
Vielen Dank! Das Aktualisieren von @apollo/client auf 3.0.0-beta.39 fĂŒhrt zu diesem Fehler.
Die Verwendung von @apollo/link-error
anstelle von apollo-link-error
hat bei mir funktioniert.
Ich bin neu bei Apollo und habe diesen Fehler erhalten, indem ich dem Apollo Server-Handbuch gefolgt bin, das Sie anweist, ApolloClient
aus apollo-boost
zu importieren, ohne die Apollo-Linkbibliotheken direkt zu verwenden. Mein Code sieht so aus:
import ApolloClient from 'apollo-boost';
const client = new ApolloClient({
uri: "/api/graphql",
});
const App = ({ Component, pageProps }: AppProps) => {
return (
<ApolloProvider client={client}>
<Component {...pageProps} />
</ApolloProvider>
)
}
Ich konnte es beheben, indem ich @apollo/client
installierte und zu etwas wie folgt umgestaltete:
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>
)
}
Vielen Dank! Das Aktualisieren von @apollo/client auf 3.0.0-beta.39 fĂŒhrt zu diesem Fehler.
Dies scheint zum GlĂŒck von Version @apollo/client auf 3.0.0-beta.41 behoben worden zu sein!
Ich hatte dieses Problem heute, als ich die neue 3.0.0-beta.43 ausprobierte.
Konnte lösen und teilen, wie es anderen hilft.
FĂŒr mich entweder das Angeben des Feldes "Auflösungen" von package.json zu beta.43 ODER alternativ das Löschen von yarn.lock
und die Neuinstallation hat dies aussortiert.
Auf 3.0.0-beta.44. Ich habe versucht, das Auflösungsfeld in package.json hinzuzufĂŒgen und die Datei "Garn.lock" zu löschen, beides hat bei mir nicht funktioniert.
FĂŒr mich hat das Upgrade des Clients und der Link-Fehler das Problem behoben:
"@apollo/client": "^3.0.0-beta.49", "@apollo/link-error": "^2.0.0-beta.3"
ich bin dabei
"@apollo/client": "^3.0.0-beta.50",
"@apollo/link-context": "^2.0.0-beta.3",
und habe immer noch dieses Problem.
ich bin dabei
"@apollo/client": "^3.0.0-beta.50", "@apollo/link-context": "^2.0.0-beta.3",
und habe immer noch dieses Problem.
FĂŒr mein Projekt hat das sorgfĂ€ltige ĂberprĂŒfen von package.json und das Sicherstellen, dass _all_ Things Apollo 3.0 ist, dann das Löschen von Garn.lock und das erneute Installieren von Garn funktioniert.
Danke @onpaws . Ich denke, mein Problem ist, dass ich andere (Entwickler-)AbhÀngigkeiten habe, die selbst "altes" Apollo als AbhÀngigkeiten haben (zB graphql-codegen
), und ich bin nicht bereit, diese zu entfernen. Aber ich _importiere_ die alten nicht in meinem Code, daher verstehe ich nicht, warum Typescript darĂŒber verwirrt sein sollte. Ich bin jedoch ganz neu bei Typescript, daher ist dies wahrscheinlich nur ein "ich"-Problem. Alles lĂ€uft gut, wenn ich nur ĂŒber as any
, auch wenn es lÀcherlich aussieht:
export const client = new ApolloClient({
cache: new InMemoryCache(),
link: authenLink.concat(httpLink as any) as any
});
Hilfreichster Kommentar
Ich sehe dieses Problem auch.