GraphQLGuide / apollo-datasource-mongodb

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

TypeScript Error: Argument of type 'Model<T, {}, {}, {}>' is not assignable to parameter of type 'Collection<T>'. #88

Open sojharo opened 2 years ago

sojharo commented 2 years ago

I am getting this weird typescript error when I put Mongoose Model in constructor.

const ListingsDataSource = new Listings(ListingModel)

My Listing Model is defined like this:

export default class Listings extends MongoDataSource<Listing> {
  getListing(_id: string) {
    return this.findOneById(_id, { ttl: MINUTE });
  }
}

My Mongoose Model is defined like this:

const listingSchema = new Schema<Listing>({
  name: { type: String, required: true },
  description: { type: [String], required: true }
});

const ListingModel = model<Listing>("Listing", listingSchema);

export default ListingModel;

My Listing Interfact is defined like this:

export interface Listing {
  _id: ObjectId;
  name: string;
  description: string[];
}

But when I pass my Mongoose Model to DataSource based class. I get following TypScript error:

TypeScript Error: Argument of type 'Model<Listing, {}, {}, {}>' is not assignable to parameter of type 'Collection<Listing>'.

I have tried many ways but this is not getting solved.

vnugent commented 2 years ago

I'm having similar error

sojharo commented 2 years ago

I have found a workaround for this but it is discouraged by Mongoose documentation here.

Workaround is to extend your interface with Document:

import { Document } from "mongoose";

export interface Listing extends Document {
  _id: ObjectId;
  name: string;
  description: string[];
}

I am not good with TypeScript so I just don't know how to fix this in library. But, I think we need to do something here: https://github.com/GraphQLGuide/apollo-datasource-mongodb/blob/master/index.d.ts#L18

lorensr commented 2 years ago

I'd be happy to look at a PR for this!

GeorgGroenendaal commented 2 years ago

I tried using the same mongoose version for my application as specified for apollo-datasource-mongodb but to no avail.

sojharo commented 2 years ago

@lorensr can you please review the following PR: https://github.com/GraphQLGuide/apollo-datasource-mongodb/pull/110