首页 > 解决方案 > 在带有 loadClass 的打字稿中使用 es6 类和猫鼬

问题描述

我有这个问题,我搜索了整个谷歌没有任何答案。我试图通过加载类(即schema.loadClass(class))来使用es6类和猫鼬,但是打字稿抛出错误,说类中缺少成员。像这样的东西:

//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`
}
}

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

标签: node.jsmongodbtypescriptmongoosees6-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需要从connectionobject( mongoose v5.11.13) 导入。


推荐阅读