我想使用定义自定义查询助手查询助手 API https://mongoosejs.com/docs/guide.html#query-helpers。
这里是例子:
// models/article.ts
import { Document, Schema, Model, model } from 'mongoose';
interface IArticle extends Document {
name: string;
}
interface IArticleModel extends Model<IArticle> {
someStaticMethod(): Promise<any>;
}
const ArticleSchema = new Schema( { name: String } )
ArticleSchema.query.byName = function(name) {
return this.find({ name })
}
export default model<IArticle, IArticleModel>('Article', ArticleSchema);
// routes/article.ts
import ArticleModel from '../models/article.ts'
router.get('/articles, (req, res) => {
ArticleModel.find().byName('example')
})
Typescript 抱怨byName
当我将其与默认值链接时的方法。
我可以把它放进去IArticleModel
接口,但在这种情况下我只能从模型中调用它。
我应该把这个方法的定义放在哪里才能以可链接的方式使用它?
我已经起草了的新版本@types/mongoose https://github.com/mattmccutchen/DefinitelyTyped/tree/mongoose-query-helpers/types/mongoose支持查询助手。看这个答案 https://stackoverflow.com/a/52503107安装修改后的方法@types
包裹。使用我的版本,您应该能够在中编写以下内容models/article.ts
:
import { Document, Schema, Model, model, DocumentQuery } from 'mongoose';
interface IArticle extends Document {
name: string;
}
interface IArticleModel extends Model<IArticle, typeof articleQueryHelpers> {
someStaticMethod(): Promise<any>;
}
const ArticleSchema = new Schema( { name: String } )
let articleQueryHelpers = {
byName(this: DocumentQuery<any, IArticle>, name: string) {
return this.find({ name });
}
};
ArticleSchema.query = articleQueryHelpers;
export default model<IArticle, IArticleModel>('Article', ArticleSchema);
进而routes/article.ts
将工作。如果这对您有用,那么我将在DefinitelyTyped 上向原始包提交拉取请求。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)