Схема/модель Mongoose с использованием typescript

Я использую эти объявления: https://github.com/vagarenko/mongoose-typescript-definitions

Следующий код работает нормально, но имеет 2 проблемы:

import M = require('mongoose');

var userSchema:M.Schema = new M.Schema(
    {
        username: String,
        password: String,
        groups: Array
    }, { collection: 'user' });


export interface IUser extends M.Document {
    _id: string;
    username:string;
    password:string;
    groups:Array<string>;

    hasGroup(group:string);
}

userSchema.methods.hasGroup = function (group:string) {
    for (var i in this.groups) {
        if (this.groups[i] == group) {
            return true;
        }
    }
    return false;
};

export interface IUserModel extends M.Model<IUser> {
    findByName(name, cb);
}

// To be called as UserModel.findByName(...)
userSchema.statics.findByName = function (name, cb) {
    this.find({ name: new RegExp(name, 'i') }, cb);
}

export var UserModel = M.model<IUser>('User', userSchema);

Проблема 1:. Меньшая проблема заключается в том, что функция IUser.hasGroup не может быть объявлена ​​внутри какого-либо класса typescript, но по крайней мере она проверена typechecked.

Проблема 2: Еще хуже. Я определяю модельный метод findByName, а в js это будет справедливо: UserModel.findByName(...), но я не могу получить его тип export var UserModel до IUserModel. Поэтому я не могу получить проверку типов на функции модели.

Ответ 1

Вы должны иметь возможность сказать что-то вроде следующего:

export var UserModel = <IUserModel>M.model('user', userSchema);

Затем вы будете иметь правильную проверку typechecking/intellisense, когда вы ссылаетесь на UserModel.