Comportamento esperado
Tipo de ApolloLink
criado por apollo-link-error onError
shoud match ApolloLink
usado por apollo-link-http e apollo-client.
Comportamento Real
Parece haver dois tipos incompatíveis de ApolloLink
nos pacotes apollo-link- * resultantes.
O exemplo abaixo retorna erros de TypeScript em locais marcados, mas funciona conforme o esperado ao adicionar as any
em locais marcados.
Uma reprodução _simples_
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'.
*/
Etiquetas de problemas
Também estou vendo esse problema.
Mesmo aqui...
@iki Interessante, obrigado por abrir a edição! Você atualizou apollo-link-error e apolo-link-http para a versão mais recente? Se você executar 'npm run compile' em https://github.com/evans/apollo-link-reproductions/tree/538 , não vejo nenhum tipo de erro. Os tipos devem funcionar, já que a digitação de pato de ApolloLink
deve ser idêntica. Você tem um repositório de reprodução que eu possa clonar? Podemos ter que declarar uma versão mínima do TS?
Tive este problema e parece que o resolvi corrigindo a versão de apollo-link
em package.json
seguinte forma:
{
"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"
}
}
Tive que fazer algo semelhante com graphql
para garantir que apenas uma cópia dele existisse.
Isso deve ser corrigido na versão mais recente. Veja # 599, que foi fechado por # 600 e lançado em [email protected]
@evans Ainda estou esperando o lançamento de
O mesmo aqui, aguardando a publicação 1.0.10
@ravishivt @sccdGyan Desculpe por isso! Não tenho certeza do que aconteceu lá. As coisas devem ser resolvidas em [email protected]
Eu tenho um problema similar:
Dependências relevantes:
"dependencies": {
"@apollo/client": "^3.0.0-beta.19",
"apollo-link-ws": "^1.0.19",
"graphql": "^14.5.8",
"subscriptions-transport-ws": "^0.9.16",
...
},
Código:
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,
);
Erro de texto datilografado:
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)
O mesmo que @mnesarco com o 3.0 beta
Estou encontrando o mesmo com
"@apollo/client": "~3.0.0-beta.29
e "@apollo/link-error": "^2.0.0-beta.3",
usando ApolloLink.from([errorLink, httpLink])
@smeevil você encontrou alguma solução para isso, eu também estou enfrentando o mesmo
não
Isso deve ser reaberto?
Atualizar a versão mais recente do cliente Apollo 3.0.0 beta 32 resolveu o problema para mim
Atualizar para [email protected] de 1.1.12 funcionou para mim.
Tudo de bom para mim agora usando
"@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",`
Tudo de bom para mim agora usando
"@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",`
Obrigado! Atualizar @ apollo / client para 3.0.0-beta.39 causará este erro.
Usar @apollo/link-error
vez de apollo-link-error
funcionou para mim.
Sou novo no Apollo e recebi este erro seguindo o guia do Apollo Server, que instrui você a importar ApolloClient
de apollo-boost
sem usar as bibliotecas de links Apollo diretamente. Meu código se parece com:
import ApolloClient from 'apollo-boost';
const client = new ApolloClient({
uri: "/api/graphql",
});
const App = ({ Component, pageProps }: AppProps) => {
return (
<ApolloProvider client={client}>
<Component {...pageProps} />
</ApolloProvider>
)
}
Consegui consertar instalando @apollo/client
e refatorando para algo assim:
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>
)
}
Obrigado! Atualizar @ apollo / client para 3.0.0-beta.39 causará este erro.
Isso parece ter sido corrigido pela versão @ apollo / client para 3.0.0-beta.41, felizmente!
Tive esse problema hoje quando experimentei o novo 3.0.0-beta.43.
Conseguiu resolver e compartilhar como caso isso ajude mais alguém.
Para mim, especificando o campo de "resoluções" de package.json para beta.43 OU, alternativamente, excluir yarn.lock
e reinstalar resolveu isso.
Em 3.0.0-beta.44. Tentei adicionar o campo de resoluções no package.json e excluir o arquivo yarn.lock, nenhum dos dois funcionou para mim.
Para mim, a atualização do cliente e o erro de link corrigiram o problema:
"@ apollo / client": "^ 3.0.0-beta.49", "@ apollo / link-error": "^ 2.0.0-beta.3"
Estou dentro
"@apollo/client": "^3.0.0-beta.50",
"@apollo/link-context": "^2.0.0-beta.3",
e ainda tem esse problema.
Estou dentro
"@apollo/client": "^3.0.0-beta.50", "@apollo/link-context": "^2.0.0-beta.3",
e ainda tem esse problema.
Para o meu projeto, revisar cuidadosamente o package.json e certificar-se de que _todas as coisas do Apollo são 3.0 e, em seguida, deletar yarn.lock e instalar novamente o yarn funcionou.
Obrigado @onpaws . Acho que meu problema é que tenho outras dependências (dev) que possuem o Apollo "antigo" como dependências (por exemplo, graphql-codegen
) e não estou disposto a removê-las. Mas eu não _importo_ os antigos em meu código, então não entendo por que o Typescript ficaria confuso sobre eles. Eu sou novo no Typescript, entretanto, então este é provavelmente apenas um problema "eu". Tudo funciona bem se eu apenas lançar via as any
, mesmo que pareça ridículo:
export const client = new ApolloClient({
cache: new InMemoryCache(),
link: authenLink.concat(httpLink as any) as any
});
Comentários muito úteis
Também estou vendo esse problema.