Apollo 客户端错误 | “RestLink”类型不可分配给“ApolloLink”类型

Posted

技术标签:

【中文标题】Apollo 客户端错误 | “RestLink”类型不可分配给“ApolloLink”类型【英文标题】:Apollo Client Error | Type 'RestLink' is not assignable to type 'ApolloLink' 【发布时间】:2020-08-29 04:15:06 【问题描述】:

现在我正在尝试在 typescript 中将 apolloClient 与 graphql 和 rest api 一起使用。

因此,我应用了 apollo-link-rest。但是我得到了下面的错误。

./node_modules/apollo-link-rest/bundle.umd.js 未找到模块:无法解析 'D:\forked\syntegrate_app_client\node_modules\apollo-link-rest' 中的 'graphql-anywhere/lib/async'

Type 'RestLink' is not assignable to type 'ApolloLink'.
  Types of property 'split' are incompatible.
    Type '(test: (op: import("d:/forked/syntegrate_app_client/node_modules/@apollo/client/link/core/types").Operation) => boolean, left: import("d:/forked/syntegrate_app_client/node_modules/@apollo/client/link/core/ApolloLink").ApolloLink | import("d:/forked/syntegrate_app_client/node_modules/@apollo/client/link/core/types")....' is not assignable to type '(test: (op: import("d:/forked/syntegrate_app_client/node_modules/apollo-link/lib/types").Operation) => boolean, left: import("d:/forked/syntegrate_app_client/node_modules/apollo-link/lib/link").ApolloLink | import("d:/forked/syntegrate_app_client/node_modules/apollo-link/lib/types").RequestHandler, right?: import("d...'.
      Types of parameters 'test' and 'test' are incompatible.
        Types of parameters 'op' and 'op' are incompatible.
          Property 'toKey' is missing in type 'import("d:/forked/syntegrate_app_client/node_modules/@apollo/client/link/core/types").Operation' but required in type 'import("d:/forked/syntegrate_app_client/node_modules/apollo-link/lib/types").Operation'.ts(2322)
types.d.ts(24, 5): 'toKey' is declared here.

这是我使用的代码。

const restLink = new RestLink(
    uri: process.env.REST_API
);

const authLink = setContext((_,  headers ) => 
    // get the authentication token from local storage if it exists
    const token = getCookie("token");
    // return the headers to the context so httpLink can read them
    return 
        headers: 
            ...headers,
            STKN: token ? `$token` : "",
        ,
    ;
);

const client = new ApolloClient(
    // link: errorLink.concat(restLink).concat(authLink).concat(link),
    link: ApolloLink.from([errorLink, restLink, authLink, link]),
    cache,
    resolvers,
);

这是我的@apollo/client 版本

"dependencies": 
        "@apollo/client": "^3.0.0-beta.44",
        "@apollo/link-context": "^2.0.0-beta.3",
     "apollo-link": "^1.2.14",
        "apollo-link-batch-http": "^1.2.13",
        "apollo-link-http": "^1.5.16",
        "apollo-link-rest": "^0.8.0-beta.0",

【问题讨论】:

同样的错误,好像没有修复? “SchemaLink”类型不可分配给“ApolloLink”类型。 有人有更新吗? 有什么想法吗? @zok 查看我的回答了解详情 【参考方案1】:

如果你想使用 apollo-link-rest,你必须使用 0.7.3 版本并使用 apollo-client 2.6.10,这解决了我的问题

0.8.0-beta.0 已经有一段时间没有更新了,目前还不清楚这是否会被维护以与@apollo/client 3 一起正常工作

【讨论】:

以上是关于Apollo 客户端错误 | “RestLink”类型不可分配给“ApolloLink”类型的主要内容,如果未能解决你的问题,请参考以下文章

Apollo 客户端/使用 localhost 反应本机错误

Apollo 客户端不显示错误消息

如何防止我的 Apollo 客户端错误处理程序(onError,错误链接)因同一错误被调用两次?

错误边界不会从 apollo 客户端捕获错误

为啥在 React 中的 Apollo 客户端中显示错误未显示

执行突变时 Apollo 客户端错误