我創建了一個Mongoose Schema併爲模型添加了一些名爲Campaign的靜態方法。在Typescript中的Mongoose Static模型定義
如果我console.log戰役,我可以看到它的方法。問題是我不知道在哪裏添加這些方法,以便Typescript也知道它們。
如果我將它們添加到CampaignModelInterface中,它們僅適用於模型的實例(或者至少TS認爲它們是)。
campaignSchema.ts
export interface CampaignModelInterface extends CampaignInterface, Document {
// will only show on model instance
}
export const CampaignSchema = new Schema({
title: { type: String, required: true },
titleId: { type: String, required: true }
...etc
)}
CampaignSchema.statics.getLiveCampaigns = Promise.method(function(){
const now: Date = new Date()
return this.find({
$and: [{startDate: {$lte: now} }, {endDate: {$gte: now} }]
}).exec()
})
const Campaign = mongoose.model<CampaignModelInterface>('Campaign', CampaignSchema)
export default Campaign
我也試圖通過Campaign.schema.statics訪問它,但沒有運氣。
任何人都可以建議如何讓TS知道模型上存在的方法,而不是模型實例嗎?
謝謝!驚訝我沒有遇到你的原始答案:) 能夠得到它的工作,如你所建議的。 如果我沒有弄錯,我現在將所有的Schema.static方法放在CampaignModelInterface和CampaignDocumentInterface上的所有Schema.method方法中? –
嗯,我個人建立了這樣一個'CampaignDocumentInterface'只包含Schema(如'CampaignSchema'中定義的)。 'CampaignInterface'包含所有的'Schema.method'方法,'CampaignModelInterface'包含所有'Schema.static'方法。 –
您也可以在'CampaignDocumentInterface'中聲明您的'Schema.method'方法,我個人更喜歡分離。 –