JSDoc + Mongoose:如何记录Mongoose模型?

ffx8fchx  于 2023-04-30  发布在  Go
关注(0)|答案(3)|浏览(134)

我有Mongooseschemamodel

var MyClientSchema = new mongoose.Schema({
    fist_name: {
        type: String
    },
    phone_number: {
        type: String
    }
});

var MyClient = mongoose.model('MyClient', MyClientSchema);

**我应该如何记录(使用JSDoc)MyClient和/或MyClientSchema,以从WebStorm获得制表符完成和类型建议对于继承自mongoose.model(如remove, findOne, find)和继承自schema(如phone_number and first_name)的两个方法,如phone_number and first_name

h79rfbju

h79rfbju1#

我发现@class(或其同义词@constructor)适用于模式属性:

/**
 * @class MyClient
 */
var MyClientSchema = new mongoose.Schema({
    fist_name: {
        type: String
    },
    phone_number: {
        type: String
    }
});

var MyClient = mongoose.model('MyClient', MyClientSchema);

@alias适用于以旧方式声明的方法:

/**
 * @alias MyClient.prototype.getDescription
 */
MyClientSchema.method('getDescription', function () {
    return this.first_name + " " + this.phone_number;
});

但是,如果使用新的方法声明方法,则可以将所有方法一次性标记为MyClient的一部分**:

/**
 * @class MyClient
 * @mixes {MyClientSchema.methods}
 */
var MyClientSchema = new mongoose.Schema({ ...

/** @mixin */
MyClientSchema.methods;

MyClientSchema.methods.getDescription = function () {
    return this.first_name + " " + this.phone_number;
};

以上所有内容都在最新的WebStorm版本(2018年)中进行了测试。2).它工作。
不起作用的东西:

  • Mongoose内置方法,如.find().save()
  • .methods语法突出显示可以工作,但代码完成不能。

欢迎更新!

v2g6jxz6

v2g6jxz62#

虽然它可能不符合您的特定要求,但官方文档中的这篇喷气式大脑教程解释了您所需要的大部分内容
https://www.jetbrains.com/help/webstorm/2017.1/creating-jsdoc-comments.html
例如,

/**
 * MyClientSchema schema
 * @constructor MyClient
 */

var MyClientSchema = new mongoose.Schema({
        fist_name: {
            type: String
        },
        phone_number: {
            type: String
        }
    });

下面的js可能是你做几乎所有你需要的事情的指南
http://nagyv.github.io/estisia-wall/models.js.html

xuo3flqw

xuo3flqw3#

对我来说,它的工作原理很简单:

var MyClientSchema = new mongoose.Schema({
    fist_name: {
        type: String
    },
    phone_number: {
        type: String
    }
});

var MyClient = mongoose.model('MyClient', MyClientSchema);

/**
 * @typedef {typeof MyClient} MyClientModel
 * @typedef {typeof MyClient.schema.obj} Client
 */

/**
 * @param {Client} client A MyClient document
 */
function (client) {
    client.[<here you get a suggestion for first_name>]
}

需要注意的是,您不会从模式的类型中获得phone_number and first_name,而是从定义文档的MyClient.schema.obj类型中获得。

相关问题