我想将mongoose
与TypeScript
一起使用。另外,我想扩展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);
答案 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);