我正在尝试使用 .plugin 方法为扩展我的 Mongoose 模型的脚本创建 Typescript 头文件。Mongoose 头文件的当前签名:
export class Schema {
// ...
plugin(plugin: (schema: Schema, options?: Object) => void,
options?: Object): Schema;
// ...
}
Mongoose-lib 的一些实际代码:
/**
* Registers a plugin for this schema.
*
* @param {Function} plugin callback
* @param {Object} [opts]
* @see plugins
* @api public
*/
Schema.prototype.plugin = function (fn, opts) {
fn(this, opts);
return this;
};
然后是我自己的模型,扩展插件;
import passportLocalMongoose = require('passport-local-mongoose')
// ...
var userSchema = new mongoose.Schema({
email: String,
password: String,
});
// ...
userSchema.plugin(passportLocalMongoose, {
usernameField: "email",
usernameLowerCase: true
});
来自护照本地猫鼬来源的片段:
module.exports = function(schema, options) {
// ...
schema.methods.setPassword = function (password, cb) {
// ...
}
schema.statics.authenticate = function() {
// ...
}
// ...
}
我的主 app.js 出现问题
// ...
userSchema.authenticate() // <<< Typescript error, undefined
// OR
userSchemaInstance.setPassword(pass, cb) // <<< Typescript error, undefined
问题是 .authenticate 等是通过.methods和.statics动态添加的...
我找不到在打字稿头文件中对此进行建模的方法。
我尝试了泛型和东西,但我不能(动态)将提供插件方法应用回原始模型。我还尝试plugin
返回泛型T extends S & P
(其中 S 从第一个参数扩展 Schema 和 P = 插件本身)。没运气 :-(
任何建议或示例如何解决这个问题?