node.js - 在带有 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`
}
}
虽然,这是一个例子,有没有办法解决这个问题?你刚刚通过回答这个问题拯救了一个家庭,谢谢。
解决方案
看起来我们在这里已经有了答案。
你的实现类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
object( mongoose v5.11.13
) 导入。
推荐阅读
- matlab - 使用drawfreehand绘制感兴趣区域后如何裁剪图像?
- javascript - 为什么 React 随机(看起来)重新加载缓存的图像?
- ambari - 通过 Ambari 安装 Ranger 数据库时,“不允许主机 'xxxx 连接到此 MySQL 服务器”
- java - 如何在arraylist中添加数据和更新
- java - 如何使用 Apache Commons Math 从曲线中获取残差
- django - 如何在 Django 模板中阅读字典
- netsuite - Suitescript 错误 - RCRD_HAS_BEEN_CHANGED - 转换为发票后关闭销售订单
- python - 我在 Databricks 中使用 Folium 时看到空白画布
- mongodb - 如何通过在mongo中过滤嵌套数组的嵌套数组来查询嵌套的对象数组
- javascript - JavaScript:传递给函数时忽略属性描述符