2017-11-18 108 views
0

我想使用mongooseTypeScript。另外,我想擴展模型功能以添加新方法。mongoose schema.method不起作用:TypeScript錯誤TS2339:屬性'myMethod'在類型'上不存在'型號<MyModelI>'

但是,當調用TSC到transpile文件獲取:

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

它的工作原理:

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); 
相關問題