Skip to content

Type 'Cat' is not assignable to type 'Document<any, any, any>' #424

Open
@alexneo2003

Description

@alexneo2003

Latest version installed
package.json

    "@nestjs/apollo": "^10.1.7",
    "@nestjs/common": "^9.0.0",
    "@nestjs/core": "^9.0.0",
    "@nestjs/graphql": "^10.1.7",
    "@nestjs/mongoose": "^9.2.1",
    "@nestjs/platform-express": "^9.0.0",
    "apollo-server-express": "^3.11.1",
    "graphql": "^16.6.0",
    "graphql-compose": "9.0.10",
    "graphql-compose-mongoose": "9.7.2",
    "mongoose": "6.8.3",

Following instructions and try using graphql-compose-mongoose in NestJS project

import { Field, Int, ObjectType } from '@nestjs/graphql';
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { schemaComposer } from 'graphql-compose';
import { composeMongoose } from 'graphql-compose-mongoose';
import mongoose from 'mongoose';

@Schema({ timestamps: true })
@ObjectType()
export class Cat {
  @Prop()
  @Field(() => String)
  name: string;

  @Prop()
  @Field(() => Int)
  age: number;

  @Prop()
  @Field(() => String)
  breed: string;
}

const schema = SchemaFactory.createForClass(Cat);

const CatModel = mongoose.model('Cat', schema);
const CatTC = composeMongoose(CatModel, {});

schemaComposer.Query.addFields({
  catById: CatTC.mongooseResolvers.findById(),
});

export const CatSchema = schemaComposer.buildSchema();

But got error at const CatTC = composeMongoose(CatModel, {});

Argument of type 'Model<Cat, {}, {}, {}, Schema<Cat, Model<Cat, any, any, any, any>, {}, {}, {}, {}, DefaultSchemaOptions, Cat>>' is not assignable to parameter of type 'Model<Document<any, any, any>, {}, {}, {}, any>'.
  The types returned by 'castObject(...)' are incompatible between these types.
    Type 'Cat' is not assignable to type 'Document<any, any, any>'.ts(2345)

I can pass any generic const CatModel = mongoose.model<any>('Cat', schema); but still having problem
NestJS saying

[Nest] 11348  - 15.01.2023, 20:05:21   ERROR [ExceptionHandler] The 2nd parameter to `mongoose.model()` should be a schema or a POJO
Error: The 2nd parameter to `mongoose.model()` should be a schema or a POJO

Schema injected in nestjs at module file

cat.module.ts

import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { Cat, CatSchema } from './cat.model';
import { CatService } from './cat.service';
import { CatResolver } from './cat.resolver';

@Module({
  imports: [MongooseModule.forFeature([{ name: Cat.name, schema: CatSchema }])],
  providers: [CatService, CatResolver],
})
export class CatModule {}

Another way - cloning example and seen you using any heneric too export const Category = model<any>('Category', CategorySchema);
If i remove it i got error

Argument of type 'Model<unknown, {}, {}>' is not assignable to parameter of type 'Model<Document<any, any, any>, {}, {}>'.
  Types of property 'find' are incompatible.
    Type '{ (callback?: Callback<(Document<any, any, unknown> & { _id: unknown; })[]>): Query<(Document<any, any, unknown> & { _id: unknown; })[], Document<any, any, unknown> & { _id: unknown; }, {}, unknown>; (filter: FilterQuery<...>, callback?: Callback<...>): Query<...>; (filter: FilterQuery<...>, projection?: any, option...' is not assignable to type '{ (callback?: Callback<(Document<any, any, any> & { _id: any; })[]>): Query<(Document<any, any, any> & { _id: any; })[], Document<any, any, any> & { ...; }, {}, Document<...>>; (filter: FilterQuery<...>, callback?: Callback<...>): Query<...>; (filter: FilterQuery<...>, projection?: any, options?: QueryOptions, callb...'.
      Types of parameters 'callback' and 'callback' are incompatible.
        Types of parameters 'result' and 'result' are incompatible.
          Type 'unknown[]' is not assignable to type 'Document<any, any, any>[]'.
            Type 'unknown' is not assignable to type 'Document<any, any, any>'.ts(2345)

If update packages to latest version - got same error as in my own project

Based on the above, there are two questions:

  1. How using package without generic?
  2. How integrate with NestJS?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions