mongoose schema.method不工作:TypeScript错误TS2339:属性'myMethod'在类型'Model <mymodeli>'上不存在

时间:2017-11-18 13:34:00

标签: typescript mongoose

我想将mongooseTypeScript一起使用。另外,我想扩展Model功能以添加新方法。

但是当调用tsc来传输文件时,我得到了:

spec/db/models/match/matchModelSpec.ts(47,36): error TS2339: Property 
'findLeagueMatches' does not exist on type 'Model<MatchModelI>'.

MatchModel.ts:

import {MatchInterface} from "./matchInterface";
import {Schema, model, Model, Document} from "mongoose";

export interface MatchModelI extends MatchInterface, Document {
    findLeagueMatches(locationName: String, leagueName: String): Promise<MatchModelI[]>;
}
export let matchSchema: Schema = new Schema({
    startTime: {type: Date, required: true},
    location: {type: Schema.Types.ObjectId, ref: 'Location'},
    league: {type: Schema.Types.ObjectId, ref: 'League'}
});

matchSchema.methods.findLeagueMatches = function(locationName: String, leagueName: String){
    //...
    return matches;
};

export const Match: Model<MatchModelI> = model<MatchModelI>("Match", matchSchema);

1 个答案:

答案 0 :(得分:0)

有效:

import {Schema, Model, model, Document} from "mongoose";
import {LeagueInterface} from "./leagueInterface";
import {MatchModelI, Match} from "../match/matchModel";
import {LocationModelI} from "../location/locationModel";

export interface ILeagueDocument extends Document {
    name: string;
    location: LocationModelI;
}

export interface LeagueModelI extends Model<ILeagueDocument>{
    getAllMatches(): Promise<MatchModelI[]>
}

export let leagueSchema: Schema = new Schema({
    name: { type: String, required: true },
    location: {type: Schema.Types.ObjectId , ref: 'Location', required: true},
});

const getAllMatches = async function ():Promise<MatchModelI[]>{
    return Match.find({league: this._id}).exec();
};

leagueSchema.method('getAllMatches', getAllMatches);


/** @class Match */
export const League: LeagueModelI = model<ILeagueDocument, LeagueModelI>("League", leagueSchema);