gpt4 book ai didi

typescript - 如何为 mongoose 'Query' 添加类型

转载 作者:行者123 更新时间:2023-12-05 06:57:06 24 4
gpt4 key购买 nike

我正在尝试将缓存层添加到我的 typescript 项目中。当我搜索时,我在媒体 How to add a Redis cache layer to Mongoose in Node.js 上找到了一篇文章

他通过在mongoose.Query.prototype中添加一个函数来实现缓存

mongoose.Query.prototype.cache = function(options = { time: 60 }) {
this.useCache = true;
this.time = options.time;
this.hashKey = JSON.stringify(options.key || this.mongooseCollection.name);

return this;
};

然后在 mongoose.Query.prototype.exec 中检查查询是否启用了缓存

mongoose.Query.prototype.exec = async function() {
if (!this.useCache) {
return await exec.apply(this, arguments);
}

const key = JSON.stringify({
...this.getFilter(),
});
console.log(this.getFilter());
console.log(this.hashKey);

const cacheValue = await client.hget(this.hashKey, key);

if (cacheValue) {
const doc = JSON.parse(cacheValue);

console.log("Response from Redis");
return Array.isArray(doc)
? doc.map((d) => new this.model(d))
: new this.model(doc);
}

const result = await exec.apply(this, arguments);
return result;
};

现在通过在 mongoose 查询中调用 cache() 函数来启用缓存

 books = await Book.find({ author: req.query.author }).cache();

一切正常,然后我尝试将它转换为 typescript ,但我不知道如何为其添加类型定义

typescript 版本总是报错

Property 'cache' does not exist on type 'Query<any>',
Property 'useCache' does not exist on type 'Query<any>',
Property 'hashKey' does not exist on type 'Query<any>',

有什么方法可以将这些类型添加到“查询”中吗?请帮助我

最佳答案

我最终通过执行以下操作使它正常工作。另见 https://stackoverflow.com/a/70656849/1435970

创建文件 /src/@types/mongoose.d.ts 并向其中添加以下内容:

type CacheOptions = {key?: string; time?: number}

declare module 'mongoose' {
interface DocumentQuery<T, DocType extends import('mongoose').Document, QueryHelpers = {}> {
mongooseCollection: {
name: any
}
cache(options?: CacheOptions): any
useCache: boolean
hashKey: string
}

interface Query<ResultType, DocType, THelpers = {}, RawDocType = DocType> extends DocumentQuery<any, any> {}
}

关于typescript - 如何为 mongoose 'Query<any>' 添加类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64980067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com