簡體   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