使用 typescript 的 Mongoose 模式/模型

标签 mongoose typescript

我使用这个声明:https://github.com/vagarenko/mongoose-typescript-definitions

下面的代码工作正常但是有两个问题:

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 不能在任何类型脚本类中声明,...但至少它是类型检查的。

问题 2: 更糟。我定义了模型方法 findByName 并且在 js 中这将是有效的:UserModel.findByName(...) 但我无法获取 export var UserModel 的类型IUserModel。所以我无法对模型函数进行任何类型检查。

最佳答案

你应该能够说出如下内容:

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

然后当您引用 UserModel 时,您将进行适当的类型检查/智能感知。

关于使用 typescript 的 Mongoose 模式/模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21341603/

相关文章:

javascript - 使用嵌入文档列表和使用 ObjectId 列表之间有区别吗?

javascript - Mongo 陷阱 : how can I perform kind of synchronously, 上的异步操作我有正确的逻辑

任何值 ESLint 错误的 Typescript 不安全分配

javascript - 带等待或不带返回之间有区别吗

javascript - ngrx 推迟生效的操作,直到调度另一个操作

javascript - 是否可以更新对象中包含的值

javascript - 如何让nodejs在继续之前等待mongodb连接(以阻塞方式调用async)

node.js - 使用 Mongoose 保存身份验证凭据时出现问题

javascript - Angular 2调用多个异步方法

angular - RxJs 扩展和延迟运算符未按预期工作