在带有 loadClass 的打字稿中将 es6 类 与猫鼬一起使用

Use es6 classes with mongoose in typescript with loadClass

我遇到了这个问题,我搜索了整个 Google 没有任何答案。我正在尝试通过加载 class(即 schema.loadClass(class))将 es6 classes 与 mongoose 一起使用,但是打字稿抛出错误说 class 中缺少成员=18=]。像这样:

//user.model.ts

import {Schema, model, Document} from "mongoose"
import User from "./user"

const schema = new Schema({
name:String,
age:Number, 
})

export interface IUser{
name:string;
age:number;
}

schema.loadClass(UserClass)
export const User = model<IUser>("User", schema)
//user.ts


export default class UserClass{
  intro():string{
return `my name is ${this.name} and I am ${this.age} years old`
}
}

不过,这只是一个例子,有没有办法解决这个问题?你回答这个问题拯救了一个家庭,谢谢。

看起来我们已经有了答案

您的实施 class UserClass 应该像

export default class UserClass {
  intro(this: IUser): string {
    return `my name is ${this.name} and I am ${this.age} years old`;
  }
}

UserClass 假设 this 作为它自己的对象,除非你另外定义它。

此外,您还可以这样修改user.model.ts

import { Schema, connection, Document } from "mongoose"
import User from "./user"

export interface IUser {
  name: string,
  age: number,
  intro(): string, // to get it via intellisense, user.intro()
}
type IntroDocument = IUser & Document;

const schema = new Schema<IntroDocument>({
  name: String,
  age: Number,
})

schema.loadClass(UserClass);
export const User = connection.model<IUser>("User", schema);

编辑:与 OP 发布的方式不同,请注意,model 需要从 connection 对象(mongoose v5.11.13)导入。