Búsqueda de sitios web

reactjs - La propiedad 'setLink' falta en el tipo 'ApolloClient<NormalizedCacheObject>' pero es obligatoria en el tipo 'ApolloClient<any>'


Estoy configurando un nuevo proyecto de TypeScript con React y Apollo Client. Estoy intentando conectar el cliente de la siguiente manera:

const client = new ApolloClient({
  cache: new InMemoryCache(),
  link: new HttpLink({
    uri: 'http://localhost:3000/graphql',
    headers: {
      authorization: localStorage.getItem('token'),
    },
  }),
});

function App() {
  return (
    <ApolloProvider client={client}>
      <div className="App">
       ...content goes here
      </div>
    </ApolloProvider>
    );
}

Sin embargo, esto genera un error durante la ejecución:

TypeScript error in /src/App.tsx(60,21):
Property 'setLink' is missing in type 'ApolloClient<NormalizedCacheObject>' but required in type 'ApolloClient<any>'.  TS2741

    58 | function App() {
    59 |   return (
  > 60 |     <ApolloProvider client={client}>
       |                     ^
    61 |       <div className="App">

Dado que esto parece ser un problema basado en tipos, intenté ser explícito al crear el cliente de Apollo según el ejemplo aquí: https://github.com/apollographql/apollo-client/issues/2503

const client = new ApolloClient<NormalizedCacheObject>{ ...

Pero nada. No estoy seguro de por qué tengo tipos enfrentados en comparación con ejemplos que funcionan. ¿Ayuda?

Respuesta #1

El paquete @apollo/client contiene las importaciones de bibliotecas previamente desacopladas como apollo-client y apollo-cache-inmemory.

Si tus importaciones se ven así:

import { ApolloClient } from 'apollo-client'
import { InMemoryCache, NormalizedCacheObject } from 'apollo-cache-inmemory'

Cambia a esto:

import {
  ApolloClient,
  InMemoryCache,
  NormalizedCacheObject,
} from '@apollo/client'

Respuesta #2

Se resolvió el mismo error modificando la interfaz ApolloProviderProps agregando un tipo unión (|) DefaultClient a la propiedad client en el archivo ApolloProvider.d.ts

import React from 'react';
import { ApolloClient } from '../../core';
export interface ApolloProviderProps<TCache> {
    client: ApolloClient<TCache> | DefaultClient<TCache>;
    children: React.ReactNode | React.ReactNode[] | null;
}
export declare const ApolloProvider: React.FC<ApolloProviderProps<any>>;

Artículos relacionados