<p>ошибка apollo-link: тип «ApolloLink» не может быть назначен типу «ApolloLink». Существуют два разных типа с этим именем, но они не связаны между собой.</p>

Созданный на 7 мар. 2018  ·  27Комментарии  ·  Источник: apollographql/apollo-link

Ожидаемое поведение

Тип ApolloLink созданный apollo-link-error onError shoud match ApolloLink используемый apollo-link-http и apollo-client.

Фактическое поведение

Кажется, есть два несовместимых типа ApolloLink в результирующих пакетах apollo-link- *.

Пример ниже возвращает ошибки TypeScript в отмеченных местах, но работает должным образом при добавлении as any в отмеченных местах.

_Простое_ воспроизведение

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

*/

Ярлыки выпуска

  • [x] имеет репродукцию
  • [ ] характерная черта
  • [] блокировка
  • [] хороший первый выпуск
has-reproduction

Самый полезный комментарий

Я тоже вижу эту проблему.

Все 27 Комментарий

Я тоже вижу эту проблему.

То же самое...

@iki Интересно, спасибо, что открыли номер! Вы обновили apollo-link-error и apolo-link-http до последней версии? Если вы запустите npm run compile в https://github.com/evans/apollo-link-reproductions/tree/538 , я не вижу ошибок типа. Типы должны работать, поскольку утиный ввод ApolloLink должен быть идентичным. У вас есть репозиторий репродукций, который я мог бы клонировать? Может придется декларировать минимальную версию ТС?

У меня была эта проблема, и, похоже, я решил ее, исправив версию apollo-link в package.json следующим образом:

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

Мне пришлось проделать то же самое с graphql чтобы гарантировать, что существует только одна его копия.

Это должно быть исправлено в самой последней версии. См. # 599, который был закрыт # 600 и выпущен в [email protected]

@evans Я все еще жду релиза [email protected] , чтобы мы получили исправления для этой проблемы. Это удерживает меня от обновления других пакетов apollo.

То же самое, ждем публикации 1.0.10

@ravishivt @sccdGyan Извините за это! Я не уверен, что там произошло. Во всем надо разобраться в

У меня похожая проблема:

Соответствующие зависимости:

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

Код:

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


Ошибка машинописного текста:

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)

То же, что @mnesarco с бета-версией 3.0

Я сталкиваюсь с тем же
"@apollo/client": "~3.0.0-beta.29 и "@apollo/link-error": "^2.0.0-beta.3",
используя ApolloLink.from([errorLink, httpLink])

@smeevil вы нашли какое-нибудь исправление по этому поводу, я тоже сталкиваюсь с тем же

Неа

Следует ли его снова открыть?

Обновление последней версии Apollo client 3.0.0 beta 32 решило проблему для меня

У меня сработало обновление до

Все хорошо для меня сейчас, используя

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

Все хорошо для меня сейчас, используя

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

Спасибо! Обновление @ apollo / client до 3.0.0-beta.39 вызовет эту ошибку.

Использование @apollo/link-error вместо apollo-link-error у меня сработало.

Я новичок в Apollo, и я получил эту ошибку, следуя руководству Apollo Server, которое инструктирует вас импортировать ApolloClient из apollo-boost без прямого использования библиотек ссылок Apollo. Мой код выглядит так:

import ApolloClient from 'apollo-boost';

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

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

Я смог исправить это, установив @apollo/client и рефакторинг до чего-то вроде этого:

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

Спасибо! Обновление @ apollo / client до 3.0.0-beta.39 вызовет эту ошибку.

Похоже, это было исправлено версией @ apollo / client до 3.0.0-beta.41, к счастью!

У меня была эта проблема сегодня, когда я попробовал новую версию 3.0.0-beta.43.
Смог решить и поделился, как в случае, если это поможет кому-то еще.

Для меня либо указание поля package.json «разрешения» для beta.43 ИЛИ, в качестве альтернативы, удаление yarn.lock и переустановка разобрали это.

На 3.0.0-beta.44. Пытался добавить поле разрешений в package.json и удалить файл yarn.lock, у меня ничего не получилось.

Для меня обновление клиента и ошибка ссылки устранили проблему:
"@ apollo / client": "^ 3.0.0-beta.49", "@ apollo / link-error": "^ 2.0.0-beta.3"

Я на

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

и все еще есть эта проблема.

Я на

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

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

и все еще есть эта проблема.

В моем проекте я внимательно просматривал package.json и убедился, что _все_ вещи Apollo имеют версию 3.0, затем удалил yarn.lock и снова установил пряжу.

Спасибо @onpaws . Думаю, моя проблема в том, что у меня есть другие (dev) зависимости, которые сами по себе имеют «старый» Apollo в качестве зависимостей (например, graphql-codegen ), и я не собираюсь их удалять. Но я не импортирую старые в свой код, поэтому не понимаю, почему Typescript может их запутать. Однако я новичок в Typescript, так что это, скорее всего, проблема "меня". Все работает нормально, если я просто использую as any , даже если это выглядит нелепо:

export const client = new ApolloClient({
  cache: new InMemoryCache(),
  link: authenLink.concat(httpLink as any) as any
});
Была ли эта страница полезной?
0 / 5 - 0 рейтинги