<p>apollo-link-error: Typ 'ApolloLink' ist dem Typ 'ApolloLink' nicht zuordenbar. Es gibt zwei verschiedene Typen mit diesem Namen, die jedoch nicht miteinander verwandt sind.</p>

Erstellt am 7. MĂ€rz 2018  Â·  27Kommentare  Â·  Quelle: apollographql/apollo-link

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

  • [x] hat-Reproduktion
  • [ ] Besonderheit
  • [ ] blockieren
  • [ ] gute erste Ausgabe
has-reproduction

Hilfreichster Kommentar

Ich sehe dieses Problem auch.

Alle 27 Kommentare

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
});
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen