Мангуст с машинописным текстом: объект, возможно, равен нулю

#typescript #express #mongoose

#машинописный текст #экспресс #мангуст

Вопрос:

При попытке найти мою пользовательскую модель я получаю: объект, возможно, «нулевой», если это возможно, я бы предпочел не подавлять строгое правило typescript.

 const { email, password } = req.body;
const user = await User.findOne({ email:email });
if (!user) {
}
/// This line causes the error
const passwordMatch = await bcrypt.compare(password, user.password);

////User Interface

import { Document } from 'mongoose';
interface User extends Document {
  email: string;
  password: string;
  username: string;
}
export default User;


////User Schema

import mongoose, { Document, Schema, Model, model } from 'mongoose';
import User from '../interfaces/User';

const UserSchema: Schema = new Schema({
  email: { type: String, required: true, unique: true },
  password: { type: String, required: true },
  username: { type: String, required: true },
});
export default mongoose.model<User>('User', UserSchema);  

Ответ №1:

Проблема в том, что ваш оператор if if (!user) не обрабатывает то, что должно произойти, если пользователь имеет значение null / undefined .

Если вы решите вернуться из функции в случае, если пользователь имеет значение null (или не определен) с

 if (!user) {
  return
}
  

TypeScript достаточно умен, чтобы понять, что как только вы дойдете до строки соответствия паролю, пользователь никогда не будет null