[英]How to define custom query helper in mongoose model with typescript?
我想使用查詢助手API定義自定義查詢助手。 這里的例子:
// 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
的新版本 。 有關安裝修改后的@types
軟件包的方法, @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上的原始包提交拉取請求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.