“ApolloServer”类型的参数不可分配给“ApolloServerBase”类型的参数

sli*_*wp2 7 typescript apollo-server apollo-server-testing

我使用apollo-server-testingpackage编写集成测试遵循这个官方文档。但是当我将ApolloServer类的实例传递给createTestClient方法时,tsc抛出一个类型不兼容的错误。

“ApolloServer”类型的参数不能分配给“ApolloServerBase”类型的参数。属性“requestOptions”的类型不兼容。类型 'Partial>' 不能分配给类型 'Partial>'。属性“documentStore”的类型不兼容。输入'import("/Users/ldu020/workspace/github.com/mrdulin/cnodejs-graphql-api-apollo/node_modules/apollo-server-caching/dist/InMemoryLRUCache").InMemoryLRUCache | undefined' 不可分配到类型 'import("/Users/ldu020/workspace/github.com/mrdulin/cnodejs-graphql-api-apollo/node_modules/apollo-server-testing/node_modules/apollo-server-caching/dist/ InMemoryLRUCache").InMemoryLRUCache ...'。输入 'import("/Users/ldu020/workspace/github.

这是最小的复制代码:

topic.integration.test.ts

import { constructTestServer } from '../../../__utils';
import { createTestClient } from 'apollo-server-testing';

describe('topic integration test suites', () => {
  it('should ', () => {
    const { server, cnodeAPI } = constructTestServer();
    const { query } = createTestClient(server); // tsc throw an error here
  });
});
Run Code Online (Sandbox Code Playgroud)

__util.ts

import { ApolloServer } from 'apollo-server';
import { contextFunction as defaultContext } from '../graphql/context';
import { schema } from '../graphql/schema';
import { CnodeAPI } from '../graphql/api';

const constructTestServer = ({ context = defaultContext } = {}) => {
  const cnodeAPI = new CnodeAPI();

  const server = new ApolloServer({
    schema,
    dataSources: () => ({ cnodeAPI }),
    context,
  });

  return { server, cnodeAPI };
};

export { constructTestServer };
Run Code Online (Sandbox Code Playgroud)

依赖版本:

"apollo-datasource-rest": "^0.6.10",
"apollo-server": "^2.9.14",
"apollo-server-express": "^2.9.14",
"apollo-server-testing": "^2.9.15",
"typescript": "^3.7.4"
Run Code Online (Sandbox Code Playgroud)

createTestClient功能界面如下:

"apollo-datasource-rest": "^0.6.10",
"apollo-server": "^2.9.14",
"apollo-server-express": "^2.9.14",
"apollo-server-testing": "^2.9.15",
"typescript": "^3.7.4"
Run Code Online (Sandbox Code Playgroud)

所以当我尝试做这样的类型断言时:

import { ApolloServerBase } from 'apollo-server-core';
// ...
createTestClient(server as ApolloServerBase);
Run Code Online (Sandbox Code Playgroud)

tsc 抛出一个新的类型错误:

'import("/Users/ldu020/workspace/github.com/mrdulin/cnodejs-graphql-api-apollo/node_modules/apollo-server-core/dist/ApolloServer").ApolloServerBase 类型的参数不可分配给输入'import("/Users/ldu020/workspace/github.com/mrdulin/cnodejs-graphql-api-apollo/node_modules/apollo-server-testing/node_modules/apollo-server-core/dist/ApolloServer").ApolloServerBase' . 属性“requestOptions”的类型不兼容。类型 'Partial>' 不能分配给类型 'Partial>'。属性“documentStore”的类型不兼容。输入'import("/Users/ldu020/workspace/github.com/mrdulin/cnodejs-graphql-api-apollo/node_modules/apollo-server-caching/dist/InMemoryLRUCache").InMemoryLRUCache | 不明确的' 不可分配到类型 'import("/Users/ldu020/workspace/github.com/mrdulin/cnodejs-graphql-api-apollo/node_modules/apollo-server-testing/node_modules/apollo-server-caching/dist/InMemoryLRUCache" ).InMemoryLRUCache ...'. 类型'import("/Users/ldu020/workspace/github.com/mrdulin/cnodejs-graphql-api-apollo/node_modules/apollo-server-caching/dist/InMemoryLRUCache").InMemoryLRUCache'不可分配给类型'import( “/Users/ldu020/workspace/github.com/mrdulin/cnodejs-graphql-api-apollo/node_modules/apollo-server-testing/node_modules/apollo-server-caching/dist/InMemoryLRUCache”)。InMemoryLRUCache'。).InMemoryLRUCache ...'. 类型'import("/Users/ldu020/workspace/github.com/mrdulin/cnodejs-graphql-api-apollo/node_modules/apollo-server-caching/dist/InMemoryLRUCache").InMemoryLRUCache'不可分配给类型'import( “/Users/ldu020/workspace/github.com/mrdulin/cnodejs-graphql-api-apollo/node_modules/apollo-server-testing/node_modules/apollo-server-caching/dist/InMemoryLRUCache”)。InMemoryLRUCache'。).InMemoryLRUCache ...'. 类型'import("/Users/ldu020/workspace/github.com/mrdulin/cnodejs-graphql-api-apollo/node_modules/apollo-server-caching/dist/InMemoryLRUCache").InMemoryLRUCache'不可分配给类型'import( “/Users/ldu020/workspace/github.com/mrdulin/cnodejs-graphql-api-apollo/node_modules/apollo-server-testing/node_modules/apollo-server-caching/dist/InMemoryLRUCache”)。InMemoryLRUCache'。

我不想做像createTestClient(server as any);. 它有效,但我想正确地制作类型。

小智 10

我认为造成之间不同版本的问题apollo-server-expressapollo-server-testing。我已经更新到 apollo-server-express 和 apollo-server-testing 到 2.9.16。然后,这种类型的错误就消失了。请尝试一下。