0

使用typegoose/mongoose我可以获得这样的类的模型(Clip将保存到数据库的类在哪里)

import { getModelForClass } from '@typegoose/typegoose';
...

const ClipModel = getModelForClass(Clip);

这个模型是可构造的,我的意思是我可以做到这一点;

const clip = new ClipModel()
const clip = new ClipModel({someProp: "someValue"})

问题

  1. 这怎么可能。如果我查看getModelForClass这里的返回类型,ReturnModelType<U, QueryHelpers>那么类型如何具有构造函数?这和做的不一样吗?
const clip = new ReturnModelType<Clip, QueryHelpers>(); // Ts error: 'ReturnModelType' only refers to a type, but is being used as a value here.
  1. 如果可以构造 ClipModel,这是否意味着 ClipModel 是一个类?如果可以,应该可以做到这一点吗?
class MyCustomModel extends ClipModel {
 // Add some customisations 
}

但是,这会产生 ts 错误Base constructors must all have the same return type.

  1. 是否可以扩展 ClipModel 以在其上具有一些自定义功能,以便可以像这样调用它;
ClipModel.find({}) // the default created find method 
ClipModel.myCustomFind({}) // find method with custom stuff

谢谢,

4

1 回答 1

0

是否可以扩展 ClipModel 以在其上具有一些自定义功能,以便可以像这样调用它;

您正在搜索的是静态方法

如果可以构造 ClipModel,这是否意味着 ClipModel 是一个类?如果可以,应该可以做到这一点吗?

ClipModel(运行时从 中返回的内容getModelForClass)是 的一个实例mongoose.Model,而在 JS 中,一个实例不能从

这怎么可能。如果我在这里查看 getModelForClass 的返回类型,它是 ReturnModelType<U, QueryHelpers> 那么类型如何具有构造函数?这和做的不一样吗?

你可以在文档中阅读更多关于ReturnModelType

您的示例也很奇怪,不能在运行时使用类型,正确的是:

type TCustomModel = ReturnModelType<typeof Class>;
// and if you have QueryHelpers for the Class
type TCustomModel = ReturnModelType<typeof Class, ClassQueryHelpers>

// and then later
const CustomModel: TCustomModel = getModelForClass(Class);
// or (pseudo code, may need more more types in ".model<>")
const CustomModel: TCustomModel = mongoose.model('Name', schema);

阅读更多QueryHelpers关于@queryMethod

于 2021-10-05T13:40:02.017 回答