Пн goose использование машинописи - PullRequest
0 голосов
/ 27 апреля 2020

Я перевожу свой код для машинописи и столкнулся с некоторыми проблемами, связанными с использованием 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

Я уверен, что я что-то наблюдаю в реализации ... но что?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...