Stworzyłem schemat Mongoose i dodałem kilka statycznych metod dla Modelu o nazwie Kampania.Mongoose statyczne definicje modeli w Maszynopisie
Jeśli mam kampanię console.log, widzę obecne na niej metody. Problem polega na tym, że nie wiem, gdzie dodać te metody, aby Maszyskopis był ich świadom.
Jeśli dodać je do mojego CampaignModelInterface, są one dostępne jedynie dla instancji modelu (lub przynajmniej TS myśli są).
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
Próbowałem też dostępu do niego poprzez Campaign.schema.statics, ale bez powodzenia.
Może ktoś doradzić jak TS niech wiedzą na temat metod obecnych w modelu, a nie instancji modelu?
Dziękujemy! Zaskoczony, nie natknąłem się na twoją oryginalną odpowiedź przed :) Udało mi się to zrobić działa, jak sugerujesz. Jeśli mam go poprawnie, będę teraz umieścić wszystkie moje metody Schema.static na CampaignModelInterface i wszystkie metody Schema.method na CampaignDocumentInterface? –
Cóż, ja osobiście mam to ustawione tak, że 'CampaignDocumentInterface' zawiera tylko schemat (jak zdefiniowano w' CampaignSchema'). "CampaignInterface" zawiera wszystkie metody 'Schema.method', a' CampaignModelInterface' zawiera wszystkie metody 'Schema.static'. –
Możesz zadeklarować swoje metody 'Schema.method' również w' CampaignDocumentInterface', wolę oddzielenie osobiście. –