модель машинописи, добавляющая аутентификацию mongoose - PullRequest
0 голосов
/ 14 мая 2018

моя проблема в том, что когда я пытаюсь добавить паспорт мангуста в мою схему, я получаю сообщение об ошибке:

export interface IUserModel extends IUser, Document { };

export let userSchema = new Schema({
    username: { type: String, required: true, unique: true }
}

firstName: { type: String, required: true },
const passportLocalMongoose = require("passport-local-mongoose");
userSchema.plugin(passportLocalMongoose);
export let User: Model<IUserModel> = model<IUserModel>("User", userSchema);

Я добавляю в app.ts (основной файл):

import { User } from "./schemas/user";
let passport = require("passport");
passport.use(new localstrategy(User.authenticate()));

Тогда я получил сообщение об ошибке:

ошибка TS2339: свойство authenticate не существует для типа Model<IUserModel>

Пожалуйста, помогите мне, если вы знаете ответ.

1 Ответ

0 голосов
/ 14 мая 2018

Typescript в основном не знает, что что-то вводит в какой-то другой модуль некоторые дополнительные значения.

Я решал подобную проблему в экспрессе. Для выражения req: express.Request мне нужно ввести state, чтобы я мог использовать свой пользовательский req.state через промежуточное ПО.

Это хак:

import { State } from './index';

declare module 'express' {
    interface Request {
        state: State;
    }
}

(Государство - просто модель машинописи):

export type State = {
    correlationId?: string;
    sessionId?: string;
    logger: Logger;
    out: any;
};

Я думаю, что вы можете сделать что-то вроде (давайте попробуем, если не работает, исправим и, если вы сделаете это, напишите правильное решение, чтобы другие могли его использовать)

declare module 'mongoose' {
    interface Model {
        authenticate: Function;
    }
}

Также есть одно «хакерское» решение - просто сохраните его в переменной :any и затем используйте его, машинопись не контролирует с ней ничего (что, с другой стороны, также не идеально, поскольку вы теряете некоторые преимущества использования машинописи) - но если это только для небольшой части приложения, вы можете сделать это)

import { User } from "./schemas/user";
let passport = require("passport");
const userThatCanDoAnything: any = User;
passport.use(new localstrategy(userThatCanDoAnything.authenticate()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...