Я перевожу свой код для машинописи и столкнулся с некоторыми проблемами, связанными с использованием Mon goose.
У меня есть взаимодействие для моего документа:
import IGroups from './IGroups';
import mongoose, { Document } from 'mongoose';
export default interface IEvents extends Document {
_id : string,
start: number,
end: number,
name: string,
groups: IGroups[],
lastRounds : string[],
rounds: number
};
Я реализую этот интерфейс:
import IGroups from "./IGroups";
import IEvents from './IEvents';
import mongoose from 'mongoose';
const Schema = mongoose.Schema;
const GroupsSchema = new Schema<IGroups>({
name: {
type: String,
required: true
},
amount: {
type: Number,
default: 0,
}
});
const EventsSchema = new Schema({
start: {
type: Number,
required: true,
},
end: {
type: Number,
required : true,
},
name: {
type: String,
required: true
},
groups: {
type : [GroupsSchema],
default: [],
},
lastRounds: {
type : [String],
default: [],
},
rounds: {
type: Number,
required: 0,
}
});
export default mongoose.model<IEvents>('Events', EventsSchema);
Однако, пытаясь использовать его, я сталкиваюсь с некоторыми проблемами:
async matchEvent(id: string) : Promise<boolean|Error> {
try {
const event : IEvents = await this.eventsModel.findById(id);
if (!event) {
return Error("MatchMakingService: Event not found")
}
const lastRounds = event.lastRounds;
const results : IResults[] = await this.resultsModel.findByEvent(id);
const inactiveUsers : string[] = SocketService.getDisconnected(event._id);
const active = results.filter(result => !inactiveUsers.includes(result._id));
const matches = this.matchMaking.match(active, lastRounds);
SocketService.connectMatches(event._id, matches);
return true
} catch(err) {
console.log(err);
return err;
};
};
TSError: ⨯ Unable to compile TypeScript:
server/services/MatchMakingService.ts:34:15 - error TS2322: Type 'IEvents | null' is not assignable to type 'IEvents'.
Type 'null' is not assignable to type 'IEvents'.
34 const event : IEvents = await this.eventsModel.findById(id);
~~~~~
server/services/MatchMakingService.ts:41:62 - error TS2339: Property 'findByEvent' does not exist on type 'Model<Document, {}>'.
41 const results : IResults[] = await this.resultsModel.findByEvent(id);
Приведение каждый раз завершается неудачно. Если использование IEvents, событие const не может быть обнулено, если удалить интерфейс IEvents как тип, я не могу получить доступ к events.lastRounds
Я уверен, что я что-то наблюдаю в реализации ... но что?