GraphQLGuide / apollo-datasource-mongodb

Apollo data source for MongoDB
MIT License
285 stars 64 forks source link

Typescript error when iniatilising data source #54

Open dan-cooke opened 3 years ago

dan-cooke commented 3 years ago

I am encountering the following error when attempting to follow the documentation

Argument of type 'Collection<Profile | UpdateQuery<Profile>>' is not assignable to parameter of type 'Collection<Profile>'.
  Types of property 'aggregate' are incompatible.

Here is my ApolloServer iniatilisation

 const client = await connectToDb();

  const schema = makeExecutableSchema({
    typeDefs: [DIRECTIVES, typeDefs],
    resolvers,
  });
  const apolloServer = new ApolloServer({
    schema,
    introspection: true,
    formatError: (error) => {
      console.error(error);
      return error;
    },
    playground: {
      endpoint: `/dev/graphql`,
    },
    dataSources: () => ({
      profiles: new Profiles(client.db().collection(`profiles`)),
    }),
  });

The line that throws the error is

 profiles: new Profiles(client.db().collection(`profiles`)),

My Profiles data source looks as follows:

import { Profile } from 'generated/mongodbTypes'
export default class Profiles extends MongoDataSource<Profile, any> { }

I am importing the following Profile type generated from my GraphQL schema by Graphql codegen

export type Profile = {
  __typename?: 'Profile';
  _id: Scalars['ObjectID'];
  user_id: Scalars['String'];
  portfolios?: Maybe<Array<Portfolio>>;
};

The weird thing is this worked on my other project before switching over to a fresh project - same code from what I can tell.

Edit:

I forgot to post versions, apologies

apollo-datasource-mongodb 0.3.0 node: 15.11.0 typescript: 4.2.3

lorensr commented 3 years ago

The weird thing is this worked on my other project before switching over to a fresh project - same code from what I can tell.

Was it the same version of this lib in the other project?

Types of property 'aggregate' are incompatible.

So there are two Collection.aggregates, and their types are different?

Sorry, I haven't learned typescript yet, so I won't be much help, but happy to merge a PR if someone fixes this ☺️

dan-cooke commented 3 years ago

@lorensr thanks for the reply!

Both projects are using the exact same version. I have just disabled ts checking for this line while I wait for a fix.

9at8 commented 3 years ago

@dan-cooke can you post which versions of @types/mongodb do you have from your yarn.lock or package-lock.json?

dan-cooke commented 3 years ago

@9at8 resolved 0.3.0 for both projects

I updated my original post with Typescript and node versions as well! thanks

paolommj commented 3 years ago

I have the same error and it's caused by mongodb having released its own types that conflict with those from @type/mongodb

Argument of type
 'import("[...]/node_modules/mongodb/mongodb").Collection<import("[...]/src/generated/schema").ActorDbObject>'
 is not assignable to parameter of type 
 'import("[...]/node_modules/apollo-datasource-mongodb/node_modules/@types/mongodb/index").Collection<import("[...]/src/generated/schema").ActorDbObject>'