簡體   English   中英

如何用打字稿在貓鼬模型中定義自定義查詢助手?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM