在带有 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
)导入。
我遇到了这个问题,我搜索了整个 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
)导入。