<p>apollo-link-error: O tipo 'ApolloLink' não pode ser atribuído ao tipo 'ApolloLink'. Existem dois tipos diferentes com este nome, mas eles não estão relacionados.</p>

Criado em 7 mar. 2018  ·  27Comentários  ·  Fonte: apollographql/apollo-link

Comportamento esperado

Tipo de ApolloLink criado por apollo-link-error onError shoud match ApolloLink usado por apollo-link-http e apollo-client.

Comportamento Real

Parece haver dois tipos incompatíveis de ApolloLink nos pacotes apollo-link- * resultantes.

O exemplo abaixo retorna erros de TypeScript em locais marcados, mas funciona conforme o esperado ao adicionar as any em locais marcados.

Uma reprodução _simples_

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

*/

Etiquetas de problemas

  • [x] tem-reprodução
  • [ ] recurso
  • [] bloqueio
  • [] boa primeira edição
has-reproduction

Comentários muito úteis

Também estou vendo esse problema.

Todos 27 comentários

Também estou vendo esse problema.

Mesmo aqui...

@iki Interessante, obrigado por abrir a edição! Você atualizou apollo-link-error e apolo-link-http para a versão mais recente? Se você executar 'npm run compile' em https://github.com/evans/apollo-link-reproductions/tree/538 , não vejo nenhum tipo de erro. Os tipos devem funcionar, já que a digitação de pato de ApolloLink deve ser idêntica. Você tem um repositório de reprodução que eu possa clonar? Podemos ter que declarar uma versão mínima do TS?

Tive este problema e parece que o resolvi corrigindo a versão de apollo-link em package.json seguinte forma:

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

Tive que fazer algo semelhante com graphql para garantir que apenas uma cópia dele existisse.

Isso deve ser corrigido na versão mais recente. Veja # 599, que foi fechado por # 600 e lançado em [email protected]

@evans Ainda estou esperando o lançamento de

O mesmo aqui, aguardando a publicação 1.0.10

@ravishivt @sccdGyan Desculpe por isso! Não tenho certeza do que aconteceu lá. As coisas devem ser resolvidas em [email protected]

Eu tenho um problema similar:

Dependências relevantes:

"dependencies": {
    "@apollo/client": "^3.0.0-beta.19",
    "apollo-link-ws": "^1.0.19",
    "graphql": "^14.5.8",
    "subscriptions-transport-ws": "^0.9.16",
    ...
  },

Código:

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


Erro de texto datilografado:

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)

O mesmo que @mnesarco com o 3.0 beta

Estou encontrando o mesmo com
"@apollo/client": "~3.0.0-beta.29 e "@apollo/link-error": "^2.0.0-beta.3",
usando ApolloLink.from([errorLink, httpLink])

@smeevil você encontrou alguma solução para isso, eu também estou enfrentando o mesmo

não

Isso deve ser reaberto?

Atualizar a versão mais recente do cliente Apollo 3.0.0 beta 32 resolveu o problema para mim

Atualizar para [email protected] de 1.1.12 funcionou para mim.

Tudo de bom para mim agora usando

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

Tudo de bom para mim agora usando

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

Obrigado! Atualizar @ apollo / client para 3.0.0-beta.39 causará este erro.

Usar @apollo/link-error vez de apollo-link-error funcionou para mim.

Sou novo no Apollo e recebi este erro seguindo o guia do Apollo Server, que instrui você a importar ApolloClient de apollo-boost sem usar as bibliotecas de links Apollo diretamente. Meu código se parece com:

import ApolloClient from 'apollo-boost';

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

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

Consegui consertar instalando @apollo/client e refatorando para algo assim:

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

Obrigado! Atualizar @ apollo / client para 3.0.0-beta.39 causará este erro.

Isso parece ter sido corrigido pela versão @ apollo / client para 3.0.0-beta.41, felizmente!

Tive esse problema hoje quando experimentei o novo 3.0.0-beta.43.
Conseguiu resolver e compartilhar como caso isso ajude mais alguém.

Para mim, especificando o campo de "resoluções" de package.json para beta.43 OU, alternativamente, excluir yarn.lock e reinstalar resolveu isso.

Em 3.0.0-beta.44. Tentei adicionar o campo de resoluções no package.json e excluir o arquivo yarn.lock, nenhum dos dois funcionou para mim.

Para mim, a atualização do cliente e o erro de link corrigiram o problema:
"@ apollo / client": "^ 3.0.0-beta.49", "@ apollo / link-error": "^ 2.0.0-beta.3"

Estou dentro

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

e ainda tem esse problema.

Estou dentro

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

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

e ainda tem esse problema.

Para o meu projeto, revisar cuidadosamente o package.json e certificar-se de que _todas as coisas do Apollo são 3.0 e, em seguida, deletar yarn.lock e instalar novamente o yarn funcionou.

Obrigado @onpaws . Acho que meu problema é que tenho outras dependências (dev) que possuem o Apollo "antigo" como dependências (por exemplo, graphql-codegen ) e não estou disposto a removê-las. Mas eu não _importo_ os antigos em meu código, então não entendo por que o Typescript ficaria confuso sobre eles. Eu sou novo no Typescript, entretanto, então este é provavelmente apenas um problema "eu". Tudo funciona bem se eu apenas lançar via as any , mesmo que pareça ridículo:

export const client = new ApolloClient({
  cache: new InMemoryCache(),
  link: authenLink.concat(httpLink as any) as any
});
Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

vjpr picture vjpr  ·  3Comentários

valerybugakov picture valerybugakov  ·  5Comentários

MoonTahoe picture MoonTahoe  ·  3Comentários

j3ddesign picture j3ddesign  ·  3Comentários

NicholasLYang picture NicholasLYang  ·  4Comentários