私はMongoose Schemaを作成し、モデルにはCampaignという静的メソッドをいくつか追加しました。Mongoose静的モデル定義(Typescript)
私は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に、そしてすべてのSchema.methodメソッドをCampaignDocumentInterfaceに入れます。 –
私は個人的に 'CampaignDocumentInterface'に' CampaignSchema'で定義されているようなスキーマだけが含まれるように設定しました。 'CampaignInterface'には' Schema.method'メソッドがすべて含まれ、 'CampaignModelInterface'にはすべての' Schema.static'メソッドが含まれています。 –
あなたは 'CampaignDocumentInterface'で' Schema.method'メソッドを宣言することもできます。私は個人的に分離を好むだけです。 –