Тип «DefaultClient <unknown>» нельзя назначить типу «ApolloClient <object>» - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь явно указать клиента на useMutation. Все работает отлично, за исключением того факта, что машинопись, кажется, видит несоответствие типов.

Type 'DefaultClient<unknown>' is not assignable to type 'ApolloClient<object>'.

Клиент очень похож на тот, который показан в документации по аутентификации токена apollo

import { ApolloClient } from 'apollo-client';
import { createHttpLink } from 'apollo-link-http';
import { setContext } from 'apollo-link-context';
import { InMemoryCache } from 'apollo-cache-inmemory';

const httpLink = createHttpLink({
  uri: '/graphql',
});

const authLink = setContext((_, { headers }) => {
  // get the authentication token from local storage if it exists
  const token = localStorage.getItem('token');
  // return the headers to the context so httpLink can read them
  return {
    headers: {
      ...headers,
      authorization: token ? `Bearer ${token}` : "",
    }
  }
});

export const client = new ApolloClient({
  link: authLink.concat(httpLink),
  cache: new InMemoryCache()
});

Все, что я на самом деле делаю, это импорт клиент и предоставить его в качестве опции для useMutation.

import {useMutation} from '@apollo/react-hooks'
import {client} from './client'

const MY_QUERY = `
  ...
`

const [myQuery] = useMutation(MY_QUERY, {
  client: client,
  onCompleted: () => {
    // do some stuff..
  }
})

useMutation, похоже, ожидает другого типа, который является выводом. Как я могу решить это несоответствие?

1 Ответ

1 голос
/ 31 марта 2020

Кажется, у вас должен быть InMemoryCache в качестве параметра типа:

export const client = new ApolloClient<InMemoryCache>({

Я пытался понять, как используется этот параметр, и я не могу понять его. Честно говоря, пустой объект тоже работает нормально:

export const client = new ApolloClient<{}>({

Но при чтении исходного кода он выглядит так, как будто ему нужен тип кэша.

...