<p>apollo-link-error : le type « ApolloLink » n'est pas attribuable au type « ApolloLink ». Deux types différents portant ce nom existent, mais ils ne sont pas liés.</p>

Créé le 7 mars 2018  ·  27Commentaires  ·  Source: apollographql/apollo-link

Comportement prévisible

Le type de ApolloLink créé par apollo-link-error onError devrait correspondre à ApolloLink utilisé par apollo-link-http et apollo-client.

Comportement réel

Il semble y avoir deux types ApolloLink incompatibles dans les packages apollo-link-* résultants.

L'exemple ci-dessous renvoie des erreurs TypeScript sur les endroits marqués, mais fonctionne comme prévu lors de l'ajout de as any sur les endroits marqués.

Une _simple_ reproduction

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'.

*/

Étiquettes de problème

  • [x] a-reproduction
  • [ ] caractéristique
  • [ ] blocage
  • [ ] bon premier numéro
has-reproduction

Commentaire le plus utile

Je vois aussi ce problème.

Tous les 27 commentaires

Je vois aussi ce problème.

Pareil ici...

@iki Intéressant, merci d'avoir ouvert le sujet ! Avez-vous mis à jour apollo-link-error et apolo-link-http vers la dernière version ? Si vous exécutez 'npm run compile' dans https://github.com/evans/apollo-link-reproductions/tree/538 , je ne vois aucune erreur de type. Les types devraient fonctionner, puisque le type de canard de ApolloLink devrait être identique. Avez-vous un référentiel de reproduction que je pourrais cloner ? On peut avoir à déclarer une version minimale de TS ?

J'ai eu ce problème et je semble l'avoir résolu en corrigeant la version de apollo-link dans package.json comme suit :

{
    "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"
    }
}

J'ai dû faire une chose similaire avec graphql pour m'assurer qu'une seule copie existe.

Cela devrait être corrigé dans la version la plus récente. Voir #599, qui a été fermé par #600 et publié dans [email protected]

@evans J'attends toujours la publication d'[email protected] afin que nous obtenions les correctifs pour ce problème. Cela m'empêche de mettre à niveau les autres packages apollo.

Idem ici, en attendant la publication de la 1.0.10

@ravishivt @sccdGyan Désolé pour ça ! Je ne sais pas ce qui s'est passé là-bas. Les choses devraient être réglées dans

J'ai le même problème:

Dépendances pertinentes :

"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,
);


Erreur de saisie :

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)

Identique à @mnesarco avec la bêta 3.0

je rencontre la même chose avec
"@apollo/client": "~3.0.0-beta.29 et "@apollo/link-error": "^2.0.0-beta.3",
en utilisant ApolloLink.from([errorLink, httpLink])

@smeevil avez-vous trouvé une solution à ce problème, je suis également confronté au même

Nan

Faut-il rouvrir celui-ci ?

La mise à jour de la dernière version du client Apollo 3.0.0 beta 32 a résolu le problème pour moi

La mise à jour vers [email protected] à

Tout va bien pour moi maintenant en utilisant

"@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",`

Tout va bien pour moi maintenant en utilisant

"@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",`

Merci! La mise à jour de @apollo/client vers 3.0.0-beta.39 provoquera cette erreur.

Utiliser @apollo/link-error au lieu de apollo-link-error fonctionné pour moi.

Je suis nouveau sur Apollo et j'ai eu cette erreur en suivant le guide Apollo Server, qui vous demande d'importer ApolloClient partir de apollo-boost sans utiliser directement les bibliothèques de liens Apollo. Mon code ressemble à :

import ApolloClient from 'apollo-boost';

const client = new ApolloClient({
  uri: "/api/graphql",
});

const App = ({ Component, pageProps }: AppProps) => {
  return (
    <ApolloProvider client={client}>
      <Component {...pageProps} />
    </ApolloProvider>
  )
}

J'ai pu le réparer en installant @apollo/client et en refactorisant quelque chose comme ceci :

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>
  )
}

Merci! La mise à jour de @apollo/client vers 3.0.0-beta.39 provoquera cette erreur.

Cela semble avoir été corrigé par la version @apollo/client à 3.0.0-beta.41, heureusement !

J'ai eu ce problème aujourd'hui lorsque j'ai essayé le nouveau 3.0.0-beta.43.
A pu résoudre et partager comment au cas où cela aiderait quelqu'un d'autre.

Pour moi, soit en spécifiant le champ "résolutions" de package.json sur beta.43, soit en supprimant yarn.lock et en réinstallant le problème.

Sur 3.0.0-beta.44. J'ai essayé d'ajouter un champ de résolutions dans package.json et de supprimer le fichier fil.lock, ni l'un ni l'autre n'a fonctionné pour moi.

Pour moi, la mise à niveau du client et l'erreur de lien ont résolu le problème :
"@apollo/client": "^3.0.0-beta.49", "@apollo/link-error": "^2.0.0-beta.3"

Je suis dessus

    "@apollo/client": "^3.0.0-beta.50",
    "@apollo/link-context": "^2.0.0-beta.3",

et j'ai toujours ce problème.

Je suis dessus

    "@apollo/client": "^3.0.0-beta.50",

    "@apollo/link-context": "^2.0.0-beta.3",

et j'ai toujours ce problème.

Pour mon projet, en examinant attentivement package.json et en vous assurant que _toutes_ les choses Apollo sont 3.0, puis en supprimant wire.lock et en réinstallant le fil a fonctionné.

Merci @onpaws . Je suppose que mon problème est que j'ai d'autres dépendances (dev) qui ont elles-mêmes de "vieux" Apollo comme dépendances (par exemple graphql-codegen ), et je ne suis pas prêt à les supprimer. Mais je n'importe pas les anciens dans mon code, donc je ne comprends pas pourquoi Typescript serait confus à leur sujet. Je suis tout nouveau sur Typescript, donc c'est probablement juste un problème de "moi". Tout fonctionne bien si je lance juste via as any , même si cela semble ridicule :

export const client = new ApolloClient({
  cache: new InMemoryCache(),
  link: authenLink.concat(httpLink as any) as any
});
Cette page vous a été utile?
0 / 5 - 0 notes