Машинопись Vue Apollo: в ApolloClient отсутствуют свойства websocket

#typescript #vue.js #apollo-client #vue-apollo #vue-testing-library

Вопрос:

Я пытаюсь настроить компонентный тест с помощью библиотеки тестирования Vue и Apollo, как описано в их примере.

 import { ApolloClient, InMemoryCache } from '@apollo/client' import { render } from '@testing-library/vue' import VueApollo from 'vue-apollo'  const apolloClient = new ApolloClient({  uri: 'http://localhost:4001/graphql',  cache: new InMemoryCache({  addTypename: false,  }), })  type ComponentType = Parameterslt;typeof rendergt;[0] const renderWithApollo = (Component: ComponentType) =gt;  render(Component, undefined, (localVue) =gt; {  localVue.use(VueApollo)   return {  apolloProvider: new VueApollo({ defaultClient: apolloClient }),  }  })  

Однако, когда я это делаю, TypeScript кричит о defaultClient следующей ошибке:

 Type 'ApolloClientlt;NormalizedCacheObjectgt;' is missing the following properties from type 'ApolloClientlt;anygt;': store, writeData, initQueryManager, wsClientts(2739) apollo-provider.d.ts(16, 5): The expected type comes from property 'defaultClient' which is declared here on type '{ defaultClient: ApolloClientlt;anygt;; defaultOptions?: VueApolloComponentOptionslt;Vuegt; | undefined; clients?: { [key: string]: ApolloClientlt;anygt;; } | undefined; watchLoading?: WatchLoading | undefined; errorHandler?: ErrorHandler | undefined; prefetch?: boolean | undefined; }'  

Как АполлоКлиент может пропустить эти типы и как я могу придать ему эти свойства? Такое чувство, что мне не хватает конфигураций.

Ответ №1:

Я узнал, что у меня пропала link недвижимость, и мне пришлось позвонить provideApolloClient :

 import { ApolloClient, InMemoryCache, HttpLink } from '@apollo/client' import { render } from '@testing-library/vue' import fetch from 'cross-fetch' import { provideApolloClient } from '@vue/apollo-composable'  const apolloClient = new ApolloClient({  uri: 'http://localhost:4001',  cache: new InMemoryCache({  addTypename: false,  }),  link: new HttpLink({ uri: '/graphql', fetch }), })  type ComponentType = Parameterslt;typeof rendergt;[0] const renderWithApollo = (Component: ComponentType) =gt;  render(Component, undefined, (localVue) =gt; {  localVue.use(VueApollo)   provideApolloClient(apolloClient)   return {  // @ts-ignore  apolloProvider: new VueApollo({ defaultClient: apolloClient }),  }  })