Ошибки типа ApolloClient для ApolloLink - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь создать ApolloClient с помощью TypeScript, но есть некоторые ошибки типа, которые я не могу исправить. Может ли кто-нибудь указать мне правильное направление, что делать?

Ниже приведен пример кода (который нормально работает с JavaScript) для создания клиента:

import {
  ApolloClient,
  ApolloProvider,
  InMemoryCache,
  split
} from '@apollo/client';

import { setContext } from 'apollo-link-context';
import { createHttpLink } from 'apollo-link-http';
import { getMainDefinition } from '@apollo/client/utilities';
import { WebSocketLink } from '@apollo/link-ws';

const authLink = setContext((_, { headers }) => {
  const token = localStorage.getItem('consequat-token');
  return {
    headers: {
      ...headers,
      authorization: token ? `bearer ${token}` : null
    }
  };
});

const httpLink = createHttpLink({ uri: 'http://localhost:4000' });

const wsLink = new WebSocketLink({
  uri: 'ws://localhost:4000/graphql',
  options: { reconnect: true },
});

const splitLink = split(
  ({ query }) => {
    const definition = getMainDefinition(query);
    return (
      definition.kind === 'OperationDefinition' &&
      definition.operation === 'subscription'
    );
  },
  wsLink,
  authLink.concat(httpLink)
);

const client = new ApolloClient({
  cache: new InMemoryCache(),
  link: splitLink
});

Проблема в том, что authLink.concat(httpLink) строка жалуется:

Argument of type 'ApolloLink' is not assignable to parameter of type 'ApolloLink | RequestHandler | undefined'.
Type 'ApolloLink' is missing the following properties from type 'ApolloLink': onError, setOnError ts(2345)

Я не могу найти ответов ни в документации Apollo, ни в Google.

1 Ответ

2 голосов
/ 09 июля 2020

Ответ на мой собственный пост:

import {
  ApolloClient,
  ApolloProvider,
  InMemoryCache,
  split
} from '@apollo/client';

import { setContext } from 'apollo-link-context';
import { createHttpLink } from 'apollo-link-http';
import { getMainDefinition } from '@apollo/client/utilities';
import { WebSocketLink } from '@apollo/link-ws';

необходимо заменить на:

import {
  ApolloClient,
  ApolloProvider,
  InMemoryCache,
  HttpLink,
  split
} from '@apollo/client';

import { setContext } from '@apollo/link-context';
import { getMainDefinition } from '@apollo/client/utilities';
import { WebSocketLink } from '@apollo/link-ws';

эти библиотеки @apollo/ и apollo- несовместимы. Кроме того, createHttpLink заменено на HttpLink, импортированное из @apollo/client, и его использование:

const httpLink = createHttpLink({ uri: 'http://localhost:4000' });

изменено на:

const httpLink = new HttpLink({ uri: 'http://localhost:4000' });
...