Header files for Mongoose' 'plugin' method (extending via .methods and .statics) Header files for Mongoose' 'plugin' method (extending via .methods and .statics) mongoose mongoose

Header files for Mongoose' 'plugin' method (extending via .methods and .statics)


Declare interfaces in passport-local-mongoose.d.ts file:

declare module 'mongoose' {    // methods    export interface PassportLocalDocument extends Document {        setPassword(pass: string, cb: (err: any) => void);    }    // statics    export interface PassportLocalModel<T extends PassportLocalDocument> extends Model<T> {        authenticate(username: string, password: string, cb: (err: any) => void);    }    // plugin options    export interface PassportLocalOptions {        usernameField?: string;        usernameLowerCase?: boolean;    }    export interface PassportLocalSchema extends Schema {        plugin(            plugin: (schema: PassportLocalSchema, options?: PassportLocalOptions) => void,            options?: PassportLocalOptions): Schema;    }    export function model<T extends PassportLocalDocument>(        name: string,        schema?: PassportLocalSchema,        collection?: string,        skipInit?: boolean): PassportLocalModel<T>;}declare module 'passport-local-mongoose' {    import mongoose = require('mongoose');    var _: (schema: mongoose.Schema, Options?: Object) => void;    export = _;}

Use it in your app.ts:

import mongoose = require('mongoose');import passportLocalMongoose = require('passport-local-mongoose');interface UserDocument extends mongoose.PassportLocalDocument {    email: string,    password: string;}var userSchema = <mongoose.PassportLocalSchema>new mongoose.Schema({    email: String,    password: String});userSchema.plugin(passportLocalMongoose, {    usernameField: 'email',    usernameLowerCase: true});var User = mongoose.model<UserDocument>('User', userSchema);User.authenticate(userName, pass, cb);var user = new User();user.setPassword(newPass, cb);