title: Nodejs - Getting mongoose typescript error
body: <h1>Typescript error</h1>
  <p><strong>I am using the same schema approach in all over my backend but only this one gives an error for some reason</strong>. It was running fine until this morning.</p>
  <p>All the other schemas in the website have exactly the same approach but this one is throwing an error.</p>
  <blockquote>
  <p><strong>Error :</strong></p>
  </blockquote>
  <pre><code>[ERROR] 19:52:58 ⨯ Unable to compile TypeScript:
  src/models/project.ts(81,3): error TS2554: Expected 0-1 arguments, but got 2.
  src/models/project.ts(83,17): error TS7006: Parameter 'doc' implicitly has an 'any' type.
  src/models/project.ts(83,22): error TS7006: Parameter 'ret' implicitly has an 'any' type.
  src/models/project.ts(90,15): error TS2551: Property 'statics' does not exist on type 'Schema'. 
  Did you mean 'static'?
  </code></pre>
  <blockquote>
  <p><strong>Schema :</strong></p>
  </blockquote>
  <pre class="lang-js prettyprint-override"><code>interface ProjectAttrs {
    user: string;
    profile: string;
    title: string;
    image: string;
    description: string;
    type: categories;
  }
  
  export interface ProjectDoc extends mongoose.Document {
    user: string;
    profile: string;
    title: string;
    image: string;
    collabImages: string[];
    description: string;
    comments: string[];
    likes: number;
    likers: ProfileDoc[];
    state: boolean;
    // requesters: ProfileDoc[];
    requests: string[];
    team: string[];
    type: categories;
  }
  
  interface ProjectModel extends mongoose.Model&lt;ProjectDoc&gt; {
    build(attrs: ProjectAttrs): ProjectDoc;
  }
  
  const projectSchema = new mongoose.Schema(
    {
      user: { type: String, required: true },
      profile: {
        type: mongoose.Schema.Types.ObjectId,
        required: true,
        ref: &quot;Profile&quot;,
      },
      title: { type: String, required: true },
      image: { type: String },
      collabImages: [{ type: String,
          required: false}],
      description: { type: String, required: true },
      comments: [{ type: mongoose.Schema.Types.ObjectId, ref: &quot;Comment&quot;}],
      state: { type: Boolean, default: true },
      likes: { type: Number, default: 0 },
      likers: [{ type: mongoose.Schema.Types.ObjectId, ref: &quot;Profile&quot;}],
      requests: [{ type: mongoose.Schema.Types.ObjectId, ref: &quot;Request&quot;}],
      team: [{ type: mongoose.Schema.Types.ObjectId, ref: &quot;Profile&quot;}],
      type: { type: String, required: true },
      createdAt: { type: Date, default: Date.now() },
    },
    {
      toJSON: {
        transform(doc, ret) { // ERROR 
          ret.id = ret._id;   // ERROR 
          delete ret._id;     // ERROR
        },
      },
    }
  );
  projectSchema.statics.build = (attrs: ProjectAttrs) =&gt; {
    return new Project(attrs);
  };
  const Project = mongoose.model&lt;ProjectDoc, ProjectModel&gt;(
    &quot;Project&quot;,
    projectSchema
  );
  export { Project };
  </code></pre>
  <p>I wonder what is it that I am missing here. I would really appreciate the help.</p>