<p>apollo-link-error: el tipo 'ApolloLink' no se puede asignar al tipo 'ApolloLink'. Existen dos tipos diferentes con este nombre, pero no están relacionados.</p>

Creado en 7 mar. 2018  ·  27Comentarios  ·  Fuente: apollographql/apollo-link

Comportamiento esperado

Tipo de ApolloLink creado por apollo-link-error onError shoud match ApolloLink utilizado por apollo-link-http y apollo-client.

Comportamiento real

Parece haber dos tipos ApolloLink incompatibles en los paquetes de resultados apollo-link- *.

El siguiente ejemplo devuelve errores de TypeScript en lugares marcados, pero funciona como se esperaba al agregar as any en lugares marcados.

Una reproducción _simple_

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

*/

Emitir etiquetas

  • [x] tiene-reproducción
  • [ ] característica
  • [] bloqueo
  • [] buen primer número
has-reproduction

Comentario más útil

También veo este problema.

Todos 27 comentarios

También veo este problema.

Aquí igual...

@iki Interesante, ¡gracias por abrir el número! ¿Ha actualizado apollo-link-error y apolo-link-http a la última versión? Si ejecuta 'npm run compile' en https://github.com/evans/apollo-link-reproductions/tree/538 , no veo ningún error de tipo. Los tipos deberían funcionar, ya que la escritura de pato de ApolloLink debería ser idéntica. ¿Tiene un repositorio de reproducción que pueda clonar? ¿Es posible que tengamos que declarar una versión mínima de TS?

Tuve este problema y parece que lo resolví arreglando la versión de apollo-link en package.json siguiente manera:

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

Tuve que hacer algo similar con graphql para asegurarme de que solo existe una copia.

Esto debería corregirse en la versión más reciente. Vea el n. ° 599, que fue cerrado por el n. ° 600 y publicado en [email protected]

@evans Todavía estoy esperando que se publique [email protected] para que obtengamos las correcciones para este problema. Me está impidiendo actualizar los otros paquetes de Apollo.

Lo mismo aquí, esperando la publicación 1.0.10

@ravishivt @sccdGyan ¡ Lo siento! No estoy seguro de lo que pasó allí. Las cosas deben resolverse en [email protected]

Tengo un problema similar:

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


Error de mecanografiado:

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)

Igual que @mnesarco con la beta 3.0

Estoy encontrando lo mismo con
"@apollo/client": "~3.0.0-beta.29 y "@apollo/link-error": "^2.0.0-beta.3",
usando ApolloLink.from([errorLink, httpLink])

@smeevil , ¿encontraste alguna solución en esto? También estoy enfrentando lo mismo

no

¿Debería reabrirse?

Actualizar la última versión del cliente Apollo 3.0.0 beta 32 resolvió el problema para mí

La actualización a [email protected] desde 1.1.12 funcionó para mí.

Todo bien para mí ahora 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",`

Todo bien para mí ahora 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",`

¡Gracias! Actualizar @ apollo / client a 3.0.0-beta.39 provocará este error.

Usar @apollo/link-error lugar de apollo-link-error funcionó para mí.

Soy nuevo en Apollo y obtuve este error siguiendo la guía del servidor Apollo, que le indica que debe importar ApolloClient desde apollo-boost sin usar las bibliotecas de enlaces de Apollo directamente. Mi código se ve así:

import ApolloClient from 'apollo-boost';

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

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

Pude solucionarlo instalando @apollo/client y refactorizando a algo como esto:

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

¡Gracias! Actualizar @ apollo / client a 3.0.0-beta.39 provocará este error.

Esto parece haber sido solucionado por la versión @ apollo / client a 3.0.0-beta.41, ¡afortunadamente!

Hoy tuve este problema cuando probé el nuevo 3.0.0-beta.43.
Pude resolver y compartir cómo en caso de que ayude a alguien más.

Para mí, especificando el campo "resoluciones" de package.json en beta.43 O, alternativamente, eliminando yarn.lock y reinstalando solucionó esto.

En 3.0.0-beta.44. Intenté agregar el campo de resoluciones en package.json y eliminar el archivo yarn.lock, ninguno de los dos me ha funcionado.

Para mí, al actualizar el cliente y el error de enlace se solucionó el problema:
"@ apollo / client": "^ 3.0.0-beta.49", "@ apollo / link-error": "^ 2.0.0-beta.3"

Estoy en

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

y todavía tengo este problema.

Estoy en

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

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

y todavía tengo este problema.

Para mi proyecto, revisar cuidadosamente package.json y asegurarme de que _todas_ las cosas de Apollo sean 3.0, luego eliminar yarn.lock y la instalación de yarn nuevamente funcionó.

Gracias @onpaws . Supongo que mi problema es que tengo otras dependencias (dev) que a su vez tienen Apollo "antiguo" como dependencias (por ejemplo, graphql-codegen ), y no estoy dispuesto a eliminarlas. Pero yo no _importo_ los antiguos en mi código, así que no entiendo por qué Typecript estaría confundido acerca de ellos. Sin embargo, soy nuevo en Typescript, por lo que probablemente sea solo un problema "yo". Todo funciona bien si envío a través de as any , aunque parezca ridículo:

export const client = new ApolloClient({
  cache: new InMemoryCache(),
  link: authenLink.concat(httpLink as any) as any
});
¿Fue útil esta página
0 / 5 - 0 calificaciones