<p>apollo-link-error: Ketik 'ApolloLink' tidak dapat ditetapkan untuk mengetik 'ApolloLink'. Ada dua jenis berbeda dengan nama ini, tetapi mereka tidak terkait.</p>

Dibuat pada 7 Mar 2018  ·  27Komentar  ·  Sumber: apollographql/apollo-link

Perilaku yang Diharapkan

Jenis ApolloLink dibuat oleh apollo-link-error onError cocok dengan ApolloLink digunakan oleh apollo-link-http dan apollo-client.

Perilaku Sebenarnya

Tampaknya ada dua jenis ApolloLink tidak kompatibel dalam hasil paket apollo-link-*.

Contoh di bawah ini mengembalikan kesalahan TypeScript pada tempat yang ditandai, tetapi berfungsi seperti yang diharapkan saat menambahkan as any pada tempat yang ditandai.

Reproduksi _sederhana_

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

*/

Label Masalah

  • [x] memiliki-reproduksi
  • [ ] fitur
  • [ ] memblokir
  • [ ] edisi pertama yang bagus
has-reproduction

Komentar yang paling membantu

Saya melihat masalah ini juga.

Semua 27 komentar

Saya melihat masalah ini juga.

Sama disini...

@iki Menarik, terima kasih telah membuka masalah! Sudahkah Anda memperbarui apollo-link-error dan apolo-link-http ke versi terbaru? Jika Anda menjalankan 'npm run compile' di https://github.com/evans/apollo-link-reproductions/tree/538 , saya tidak melihat kesalahan jenis apa pun. Jenisnya harus berfungsi, karena pengetikan bebek dari ApolloLink harus identik. Apakah Anda memiliki repositori reproduksi yang dapat saya tiru? Kami mungkin harus mendeklarasikan versi minimum TS?

Saya mengalami masalah ini, dan tampaknya telah menyelesaikannya dengan memperbaiki versi apollo-link di package.json sebagai berikut:

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

Saya harus melakukan hal serupa dengan graphql untuk memastikan hanya ada satu salinannya.

Ini harus diperbaiki dalam rilis terbaru. Lihat #599, yang ditutup oleh #600 dan dirilis di [email protected]

@evans Saya masih menunggu [email protected] dirilis sehingga kami mendapatkan perbaikan untuk masalah ini. Ini menahan saya untuk memutakhirkan paket apollo lainnya.

Sama di sini, menunggu rilis 1.0.10

@ravishivt @sccdGyan Maaf tentang itu! Saya tidak yakin apa yang terjadi di sana. Hal-hal harus diselesaikan di [email protected]

Saya memiliki masalah serupa:

Dependensi yang relevan:

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

Kode:

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


Kesalahan skrip:

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)

Sama seperti @mnesarco dengan versi 3.0 beta

Saya mengalami hal yang sama dengan
"@apollo/client": "~3.0.0-beta.29 dan "@apollo/link-error": "^2.0.0-beta.3",
menggunakan ApolloLink.from([errorLink, httpLink])

@smeevil apakah Anda menemukan perbaikan untuk ini, saya juga menghadapi hal yang sama

tidak

Apakah ini harus dibuka kembali?

Memperbarui klien Apollo terbaru versi 3.0.0 beta 32 memecahkan masalah bagi saya

Memperbarui ke [email protected] dari 1.1.12 berhasil untuk saya.

Semua baik untuk saya sekarang menggunakan

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

Semua baik untuk saya sekarang menggunakan

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

Terima kasih! Memperbarui @apollo/client ke 3.0.0-beta.39 akan menyebabkan kesalahan ini.

Menggunakan @apollo/link-error alih-alih apollo-link-error berhasil untuk saya.

Saya baru mengenal Apollo dan saya mendapatkan kesalahan ini dengan mengikuti panduan Server Apollo, yang menginstruksikan Anda untuk mengimpor ApolloClient dari apollo-boost tanpa menggunakan pustaka tautan Apollo secara langsung. Kode saya terlihat seperti:

import ApolloClient from 'apollo-boost';

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

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

Saya dapat memperbaikinya dengan menginstal @apollo/client dan refactoring menjadi sesuatu seperti ini:

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

Terima kasih! Memperbarui @apollo/client ke 3.0.0-beta.39 akan menyebabkan kesalahan ini.

Ini tampaknya telah diperbaiki oleh versi @apollo/client ke 3.0.0-beta.41, untungnya!

Saya mengalami masalah ini hari ini ketika saya mencoba yang baru 3.0.0-beta.43.
Mampu menyelesaikan dan berbagi bagaimana jika itu membantu orang lain.

Bagi saya menentukan bidang "resolusi" package.json ke beta.43 ATAU, sebagai alternatif, menghapus yarn.lock dan menginstal ulang menyelesaikannya.

Pada 3.0.0-beta.44. Mencoba menambahkan bidang resolusi di package.json dan menghapus file yarn.lock, tidak ada yang berhasil untuk saya.

Bagi saya memutakhirkan klien dan kesalahan tautan memperbaiki masalah:
"@apollo/client": "^3.0.0-beta.49", "@apollo/link-error": "^2.0.0-beta.3"

aku di

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

dan masih memiliki masalah ini.

aku di

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

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

dan masih memiliki masalah ini.

Untuk proyek saya, dengan hati-hati meninjau package.json dan memastikan _all_ things Apollo adalah 3.0, kemudian menghapus yarn.lock dan pemasangan benang kembali berhasil.

Terima kasih @onpaws . Saya kira masalah saya adalah bahwa saya memiliki dependensi (dev) lain yang memiliki Apollo "lama" sebagai dependensi (misalnya graphql-codegen ), dan saya tidak siap untuk menghapusnya. Tapi saya tidak _import_ yang lama dalam kode saya, jadi saya tidak mengerti mengapa TypeScript akan bingung tentang mereka. Saya baru mengenal TypeScript, jadi ini kemungkinan hanya masalah "saya". Semuanya berjalan dengan baik jika saya hanya melakukan cast melalui as any , meskipun terlihat konyol:

export const client = new ApolloClient({
  cache: new InMemoryCache(),
  link: authenLink.concat(httpLink as any) as any
});
Apakah halaman ini membantu?
0 / 5 - 0 peringkat