使用typescript的Mongoose模式/模型

使用typescript的Mongoose模式/模型,mongoose,typescript,Mongoose,Typescript,我使用以下声明: 以下代码工作正常,但存在两个问题: import M = require('mongoose'); var userSchema:M.Schema = new M.Schema( { username: String, password: String, groups: Array }, { collection: 'user' }); export interface IUser extends M.Doc

我使用以下声明:

以下代码工作正常,但存在两个问题:

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);
import M=require('mongoose');
var userSchema:M.Schema=新的M.Schema(
{
用户名:String,
密码:String,
组:数组
},{集合:'用户'});
导出接口IUser扩展了M.文档{
_id:字符串;
用户名:字符串;
密码:字符串;
组:阵列;
hasGroup(组:string);
}
userSchema.methods.hasGroup=函数(组:字符串){
for(此.groups中的var i){
if(this.groups[i]==组){
返回true;
}
}
返回false;
};
导出接口IUserModel扩展了M.Model{
findByName(名称,cb);
}
//被称为UserModel.findByName(…)
userSchema.statics.findByName=函数(名称,cb){
find({name:newregexp(name,'i')},cb);
}
导出var UserModel=M.model('User',userSchema);
问题1:较小的问题是,函数IUser.hasGroup不能在任何typescript类中声明。。。但至少它是经过打字检查的


问题2:更糟。我定义了model方法
findByName
,在js中这是有效的:
UserModel.findByName(…)
,但我无法获取
导出var UserModel
IUserModel
的类型。因此,我无法对模型函数进行任何类型检查。

您应该可以这样说:

export var UserModel = <IUserModel>M.model('user', userSchema);
导出var UserModel=M.model('user',userSchema);
然后,当您引用用户模型时,您将有适当的类型检查/智能感知。

听起来不错。在我把问题标记为正确之前,我会检查一下。谢谢:)我从来没有在猫鼬身上用过这些打字,我不确定这对你是否有什么要求。我通常坚持使用来自中国的打字机。猫鼬的定义可以找到,而且它的打字比你链接的要多得多。