UserModel не может быть назначен параметру типа Document |nulll [мангуст с машинописью] - PullRequest
0 голосов
/ 27 октября 2018

Машинопись дает мне ошибку. Ошибка связана с тем, что mongoose ожидает, что обещание поиска будет выполнено с документом mongoose (в данном случае это документ пользователя) или «null». Но я хочу получить доступ ко всем методам пользователя, поэтому я должен указать, что эта функция будет принимать модель пользователя в качестве аргумента. Но эта вещь вызывает у меня следующую ошибку:

Аргумент типа '(user: UserModel) => Ответ' не может быть назначен параметру типа '(res: Document | null) => void | Ответ | PromiseLike.

Это код:

    import express, { Request, Response } from "express";


   import User, { UserModel } from "../../models/User";
    // router
    const router = express.Router();

    // @route   GET api/user/username/:username
    // @access  Public

    router.get("/username/:username", (req: Request, res: Response) => {
      User.findOne({ username: req.params.username })
        .then((user: UserModel | null) => res.json(user))
        .catch(err => res.json(err));
    });

    export default router;

Это модель пользователя:

import mongoose, { Schema, model } from "mongoose";

export type UserModel = mongoose.Document & {
  name: string; 
  username: string;
  email: string; 
  password: string; 
  avatar: string;
  created_at: Date; 
};


export const UserSchema = new Schema({

  name: {
    type: String,
    required: true
  },

  username: {
    type: String,
    required: true,
    unique: true
  },

  email: {
    type: String,
    unique: true
  },

  password: {
    type: String,
    required: true
  },

  avatar: {
    type: String
  },

  created_at: {
    type: Date,
    default: Date.now
  }
});

export default model("User", UserSchema);

1 Ответ

0 голосов
/ 27 октября 2018

Функция model принимает аргумент типа для типа документа коллекции. (Он доверяет вам; у него нет никакого способа проверить правильность типа.) Заменить:

export default model("User", UserSchema);

с:

export default model<UserModel>("User", UserSchema);

Тогда все запросы к этой коллекции будут производить UserModel объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...