javascript - 如何使用打字稿在猫鼬模型中定义自定义查询助手?
问题描述
我想使用 查询助手 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')
})
byName
当我将它与默认值链接时,Typescript 抱怨方法。
我可以把它放在IArticleModel
接口中,但在那种情况下我只能从模型中调用它。
我应该把这个方法的定义放在哪里才能以可链接的方式使用它?
解决方案
我已经起草了一个支持查询助手的新版本。@types/mongoose
有关安装修改包的方法,请参阅此答案。@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
会工作。如果这对您有用,那么我将在DefiniteTyped 上向原始包提交拉取请求。
推荐阅读
- sql - Oracle 在 DML 数据获取中使用变量?
- java - 如何更改图层
- python - PyMongo - 未定义名称“SON”
- javascript - 从 Chrome 控制台记录到 Python
- javascript - 不要在 ngx-charts-line-chart 上绘制空值图形
- python - 如何将操纵的分类变量编码回原始值?
- android - 错误:资源 'attr/content' 的重复值与配置 ''
- node.js - Node.js 400 错误请求
- mysql - Laravel:加入三个表得到不存在的行
- google-chrome-extension - 当用户单击网页上的按钮时如何使用扩展程序打开隐身窗口