繁体   English   中英

当我尝试使用 mongoose 方法时出现 Typescript 错误

[英]Typescript error when I try to use mongoose methods

我有一个用户界面:

import {Document} from "mongoose";

export interface IUser extends Document{
    email: string;
    password: string;
    strategy: string;
    userId: string;
    isValidPassword(password: string): boolean;
}

和一个模式:

import { IUser } from "../interfaces/User";

const userSchema = new Schema({
  strategy: {
    type: String,
    enum: ["local", "facebook", "google"]
  },
  email: {
    type: String,
    lowercase: true
  },
  password: {
    type: String
  },
  userId: {
    type: String
  }
});
const User = mongoose.model<IUser>("user", userSchema);

现在,当我尝试使用时:

const user :IUser= User.findOne({email});
        if(!user){
            done(null, false)
        }
        user.isValidPassword(password);

它说“TS2740:类型'DocumentQuery <IUser | null,IUser,{}>'缺少'IUser'类型的以下属性:email,密码,策略,用户ID和另外53个。”

如果我尝试从const user:IUser= User.findOne({email}); . 它不允许我使用user.isValidPassword(password);

而且我不想为用户使用any类型。

您应该使用await Model.findOne()语句查询user文档,请参阅Model.findOne()

它将返回类型为IUser | nulluser IUser | null

然后,您可以调用实例方法- user.isValidPassword(password)

一个工作示例:

user.ts

import { Document, Schema, model } from 'mongoose';

interface IUser extends Document {
  email: string;
  password: string;
  strategy: string;
  userId: string;
  isValidPassword(password: string): boolean;
}

const userSchema = new Schema({
  strategy: {
    type: String,
    enum: ['local', 'facebook', 'google'],
  },
  email: {
    type: String,
    lowercase: true,
  },
  password: {
    type: String,
  },
  userId: {
    type: String,
  },
});
const User = model<IUser>('user', userSchema);

export { User, IUser };

main.ts

import { IUser, User } from './user';

async function main() {
  const email = 'teresa.teng@gmail.com';
  const password = '123';
  const user: IUser | null = await User.findOne({ email });
  if (!user) {
    return;
  }
  user.isValidPassword(password);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM