#javascript #typescript #mongoose
#javascript #typescript #мангуст
Вопрос:
У меня следующий сценарий, у меня есть 2 интерфейса:
export interface UserInterface extends Document {
email: string,
role: string,
created: Date,
disabled: Boolean,
author: AuthorInterface
}
export interface UserModelInterface extends UserInterface {
password: string
}
и у меня есть один метод:
public findUserById(_id: mongoose.Types.ObjectId | string, sensitive: Boolean = false): Promise<UserInterface | null> {
if (sensitive) return User.findOne({ _id }).exec()
return User.findOne({ _id }, { password: 0 }).exec()
}
Я хочу следующее:
Это метод, который получает пользователя по идентификатору. sensitive
по умолчанию на false
witch указывает, что пароль исключен, поэтому я использую UserInterface
Проблема, с которой я столкнулся сейчас, заключается в том, что если кто-то установит значение sensitive on true
, мне нужно будет использовать UserModelInterface
, а не UserInterface
потому, что пароль исключен в UserInterface
Возможно ли это?
Комментарии:
1. Вот для чего хороша перегрузка.
2. @Bergi не могли бы вы это объяснить? или связать мне некоторые ресурсы?
3. первый удар: typescriptlang.org/docs/handbook/functions.html#overloads
Ответ №1:
Спасибо @Bergi за то, что показал мне направление. Решение заключается в использовании перегрузок:
public findUserById(_id: mongoose.Types.ObjectId | string, sensitive?: false): Promise<UserInterface | null>
public findUserById(_id: mongoose.Types.ObjectId | string, sensitive?: true): Promise<UserModelInterface | null>
public findUserById(_id: mongoose.Types.ObjectId | string, sensitive: Boolean = false): Promise<UserModelInterface | UserInterface | null> {
if (sensitive) return User.findOne({ _id }).exec()
return User.findOne({ _id }, { password: 0 }).exec()
}